2015-10-19 31 views
3

我已經知道測試的存儲方式,我可以做如下:字節序測試和類型轉換

bool IsLittleEndian(){ 

    int a = 1; 

    char* ptr = (char*)&a; 

    return *ptr; 
} 

我的問題是,爲什麼我們不能只投intchar而不是int*char*以上,喜歡這個。

int a = 1; 

char c = (char)a; 

這也行嗎?否則,我們不能這樣做的原因是什麼?

+0

可能的重複[是否此代碼檢查是否存在?](http://stackoverflow.com/questions/3572371/does-this-code-check-for-endianess) –

回答

9

intchar都是數字類型。由於編譯器知道正在使用的體系結構,所以int中的1將在char中變爲1,而不管字節順序如何。我們使用指針來欺騙編譯器不處理數據。

0

在C中進行強制轉換是嘗試在新類型中儘可能好地表示原始值的操作(有一些例外)。

它不採用位模式並在新類型中重新解釋它,例如, (int)3.14應導致3它有一個完全不同的位模式(可能)。

因此(char)(int)1總是1