大端格式(big endian / BE):數(shù)據(jù)在內(nèi)存中存儲(chǔ)時(shí),先存儲(chǔ)高位部分到低地址,再存儲(chǔ)低位部分到高地址
小端格式(little endian /LE):數(shù)據(jù)在內(nèi)存中存儲(chǔ)時(shí),先存儲(chǔ)低位部分到低地址,再存儲(chǔ)高位部分到高地址
例子1:在內(nèi)存中雙字0x01020304(DWord)的存儲(chǔ)方式。需要知道:PowerPC系列采用big endian方式存儲(chǔ)數(shù)據(jù),而x86系列則采用littleendian方式存儲(chǔ)數(shù)據(jù)
為了檢測(cè)自己系統(tǒng)是大端格式還是小端格式,可以用一下代碼測(cè)試:
int is_big_endian(void){ union { uint32_t i; char c[4]; } e = {0x10000000}; return e.c[0];}
在main中測(cè)試:
int main()
{
PRintf("System is %s -endian./n", is_big_endian() ? "big" : "little");
return 0;
}
對(duì)報(bào)文中“前低后高”報(bào)文的處理可參考以下例子:
int main(){ unsigned int orignalNum = 0x4048F5C2;//3.14 float num = *(float *)(&orignalNum); printf("%f/n",num); //已知4字節(jié)報(bào)文可以按上述解析//下面例子則是將前低后高的報(bào)文放入數(shù)組,由數(shù)組內(nèi)存轉(zhuǎn)換成float值 float b; unsigned char Fvalue[4] = {0xc2,0xf5,0x48,0x40} ;//注意,這里與0x4048F5C2恰恰高地位對(duì)調(diào) memcpy(&b,Fvalue,sizeof(Fvalue)); //按照內(nèi)存地址的低位到高位拷貝 printf("b =%f /n",b);
測(cè)試結(jié)果:
3.140000b =3.140000
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注