我測試字節序與條件((char)((int)511) == (char)255)
。真的意味着小,虛假意味着大。
我已經在幾個不同的系統,既少,大與優化關閉,以最大測試這一點,使用gcc。在我做的每一個測試中,我都得到了正確的結果。
在需要執行關鍵操作之前,可以將該條件放入應用程序中。如果你只想機制保障您正在使用正確的字節序爲您的整個應用程序,你也可以使用一個靜態斷言方法如如下:
extern char ASSERTION__LITTLE_ENDIAN[((char)((int)511) == (char)255)?1:-1];
在全球範圍內這條線將創建一個編譯錯誤,如果該系統不是小端,並會拒絕編譯。如果沒有錯誤,它就會完美編譯,就好像該行不存在一樣。我發現該錯誤消息是相當描述:
error: size of array 'ASSERTION__LITTLE_ENDIAN' is negative
現在,如果你是偏執狂你的編譯器優化了實際的檢查走像我的,你可以做到以下幾點:
int endian;
{
int i = 255;
char * c = &i;
endian = (c[0] == (char)255);
}
if(endian) // if endian is little
它壓縮在很好地對這個宏:
#define isLittleEndian(e) int e; { int i = 255; char * c = &i; e = (c[0] == (char)255); }
isLittleEndian(endian);
if(endian) // if endian is little
或者,如果你使用GCC,你可以逃脫:
#define isLittleEndian ({int i = 255; char * c = &i; (c[0] == (char)255);})
if(isLittleEndian) // if endian is little
'「%p」'期望一個'void *',而不是一個整數。任何指針都可以在大多數機器上工作,但在技術上是正確的(因爲可變參數),所以在使用它時應該明確地施放。 –
好點。我剛剛刪除提及它。 – loganfsmyth
此外,您需要使用'「%hhx」'來打印一個'unsigned char'值,而不是一個完整的'unsigned'值。 –