C/C++字節序(大端/小端)判斷


C/C++大端小端判斷

說的是變量的高字節、低字節在內存地址中的排放順序。

變量的高字節放到內存的低地址中(變量的低字節放到內存的高地址中)>大端
變量的高字節放到內存的高地址中(變量的低字節放到內存的低地址中)
>小端

例如,對於int類型變量x=0x30313233,在x86下,考慮到在內存中是按照字節為單位進行數據排布,那么會把0x30,0x31,0x32,0x33這4個值按照某種順序(大端或者小端)進行存儲:從0x30到0x33依次為變量的高字節到低字節,如果是大端字節序存儲,則從低內存地址到高內存地址,依次存放:0x30, 0x31, 0x32, 0x33;如果是小端字節序存儲,則從低內存地址到高內存地址,依次存放:0x33, 0x32, 0x31, 0x30(用這幾個蛋疼的16進制數字,是為了后續強轉為char類型並打印的方便而考慮的):

寫個代碼驗證下:

void test_little_or_big_endian() {
	int x;
	cout << "sizeof(int) is " << sizeof(int) << endl;
	char x0, x1, x2, x3;
	x = 0x30313233;
	cout << *((char*)&x) << endl;
	x0 = ((char*)&x)[0];
	x1 = ((char*)&x)[1];
	x2 = ((char*)&x)[2];
	x3 = ((char*)&x)[3];


	cout << "x0=" << x0 << endl;
	cout << "x1=" << x1 << endl;
	cout << "x2=" << x2 << endl;
	cout << "x3=" << x3 << endl;
    /*
    對於小端序,輸出
    x0=3   
    x1=2
    x2=1
    x3=0   //0x30對應到十進制的48,也即是ascii的'0',作為char類型輸出顯示為0
    */
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM