1. 程式人生 > >如何檢測cpu的位元組順序是小端模式還是大端模式

如何檢測cpu的位元組順序是小端模式還是大端模式

位元組序,顧名思義位元組的順序,再多說兩句就是大於一個位元組型別的資料在記憶體中的存放順序(一個位元組的資料當然就無需談順序的問題了)其實大部分人在實際的開 發中都很少會直接和位元組序打交道。唯有在跨平臺以及網路程式中位元組序才是一個應該被考慮的問題。

在所有的介紹位元組序的文章中都會提到字 節序分為兩類:Big-Endian和Little-Endian,引用標準的Big-Endian和Little-Endian的定義如下:
a) Little-Endian就是低位位元組排放在記憶體的低地址端,高位位元組排放在記憶體的高地址端。(X86 CPU系列採用的位序)
b) Big-Endian就是高位位元組排放在記憶體的低地址端,低位位元組排放在記憶體的高地址端。

c) 網路位元組序:TCP/IP各層協議將位元組序定義為Big-Endian,因此TCP/IP協議中使用的位元組序通常稱之為網路位元組序。

如何判斷一個cpu採用的是哪種模式呢?

int checkCPU()
{{
union w
{ 
int a;
char b;
} c;
c.a = 1;
return (c.b == 1);
}
}
union中的存放順序所有成員都是從低地址開始存放,如果cpu是小端模式,則c.b==1為真,否則為假。