ที่นี่เราจะมาดูวิธีการแปลงค่า endian น้อยเป็นค่า endian ใหญ่หรือค่า endian ใหญ่เป็น endian น้อยใน C ++ ก่อนจะไปเสวนาจริง ๆ เรามาดูว่า endian ใหญ่กับ endian เล็กคืออะไร?
ในสถาปัตยกรรมที่แตกต่างกัน ข้อมูลแบบหลายไบต์สามารถจัดเก็บได้สองวิธี บางครั้งไบต์ลำดับที่สูงกว่าจะถูกเก็บไว้ก่อน ในกรณีนี้เรียกว่า big endian และบางครั้งไบต์ลำดับที่ต่ำกว่าจะถูกเก็บไว้ก่อน จากนั้นจึงเรียกว่า little endian
ตัวอย่างเช่น หากตัวเลขคือ 0x9876543210 ดังนั้น endian ตัวใหญ่จะเป็น −
เอ็นเดียนตัวน้อยจะเป็นแบบนี้ -
ในส่วนนี้ เราจะมาดูวิธีการแปลง endian น้อยเป็น endian ใหญ่และในทางกลับกัน ในการทำเช่นนี้เราต้องสลับไบต์ที่ 1 และ 4 และ 2 และ 3 เราสามารถแลกเปลี่ยนกันได้โดยใช้นิพจน์เชิงตรรกะ ทำสำเนาตัวเลขสี่ครั้ง จากนั้นสำหรับสำเนาแรก เลื่อนไบต์ที่ 1 ไปทางขวา 24 ครั้ง สำหรับสำเนาที่สอง ปิดบังด้วย 00FF0000 จากนั้นสลับ 8 บิตไปทางขวา สำหรับสำเนาที่ 3 มาสก์ด้วย 0000FF00 จากนั้นเลื่อนไปทางซ้าย 8 บิต และสำหรับสำเนาสุดท้ายให้สลับองค์ประกอบไปทางซ้าย 24 ครั้ง จากนั้นใช้ตรรกะหรือสำเนาทั้งสี่นี้เพื่อให้ได้ผลลัพธ์ที่ย้อนกลับ
ตัวอย่าง
#include <iostream> #define SWAP_INT32(x) (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24)) using namespace std; void memory_represent(char *value, int n) { int i; for (i = 0; i < n; i++) printf(" %.2x", value[i]); } int main() { unsigned int x = 0x9876543210; int y; cout << "The little endian value is: "; memory_represent((char*)&x, sizeof(x)); cout << endl; y = SWAP_INT32(x); cout << "The Big endian value after conversion is: "; memory_represent((char*)&y, sizeof(y)); cout << endl; }
ผลลัพธ์
The little endian value is: 10 32 54 76 The Big endian value after conversion is: 76 54 32 10