কম্পিউটার টিউটোরিয়াল

C++-এ বাইগ-এন্ডিয়ান ও লিটেল-এন্ডিয়ান কনভার্সন

বহু-বাইট ডেটা মেমরিতে দুভাবেই স্টোর হতে পারে: বিগ-এন্ডিয়ান (MSB প্রথমে) এবং লিটেল-এন্ডিয়ান (LSB প্রথমে)। নেটওয়ার্ক অর্ডার (Big-endian) এবং x86 আর্কিটেকচার (Little-endian) আলাদা। কনভার্সন জন্য বাইট সওয়াপ করতে হয়।

মেমরি রিপ্রেজেন্টেশন (0x9876543210)

বাইট অফসেটBig-EndianLittle-Endian
00x980x10
10x760x32
20x540x54
30x320x76
40x100x98

32-বিট ইন্টিজার বাইট সওয়াপ (বিটওয়াইজ)

#define SWAP_INT32(x) ( \
    ((x) >> 24) | \
    (((x) & 0x00FF0000) >> 8) | \
    (((x) & 0x0000FF00) << 8) | \
    ((x) << 24) \
)

উদাহরণ কোড

#include <iostream>
#include <cstdio>
#define SWAP_INT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24))

void print_bytes(const char* label, unsigned int val) {
    printf("%s: ", label);
    for (int i = 0; i < 4; i++)
        printf(" %.2x", reinterpret_cast<const unsigned char*>(&val)[i]);
    printf("\n");
}

int main() {
    unsigned int x = 0x98765432; // 32-bit উদাহরণ
    print_bytes("Little-endian", x);
    unsigned int y = SWAP_INT32(x);
    print_bytes("Big-endian", y);
    return 0;
}

আউটপুট

Little-endian: 32 54 76 98
Big-endian: 98 76 54 32

পোর্টেবল সমাধান (C++23 / Boost / Endian হেডার)

  • C++23: std::byteswap (header ``)
  • Boost: boost::endian::big_to_native, native_to_big
  • POSIX: htonl, ntohl (network byte order)

দ্রষ্টব্য: আধুনিক কোডে হাতের বাইট সওয়াপ না লিখে স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করুন।

  1. C++-এ int কে string-এ রূপান্তর (Integer to String)

  2. C++-এ float এবং double তুলনা করা (Comparing Float and Double)

  3. C++ এবং C#-এর পার্থক্য

  4. এক্সেলে সেল হেক্টর এবং একর মধ্যে রূপান্তর করার পদ্ধতি