我已經知道測試的存儲方式,我可以做如下:字節序測試和類型轉換
bool IsLittleEndian(){
int a = 1;
char* ptr = (char*)&a;
return *ptr;
}
我的問題是,爲什麼我們不能只投int
到char
而不是int*
到char*
以上,喜歡這個。
int a = 1;
char c = (char)a;
這也行嗎?否則,我們不能這樣做的原因是什麼?
我已經知道測試的存儲方式,我可以做如下:字節序測試和類型轉換
bool IsLittleEndian(){
int a = 1;
char* ptr = (char*)&a;
return *ptr;
}
我的問題是,爲什麼我們不能只投int
到char
而不是int*
到char*
以上,喜歡這個。
int a = 1;
char c = (char)a;
這也行嗎?否則,我們不能這樣做的原因是什麼?
int
和char
都是數字類型。由於編譯器知道正在使用的體系結構,所以int
中的1將在char
中變爲1,而不管字節順序如何。我們使用指針來欺騙編譯器不處理數據。
在C中進行強制轉換是嘗試在新類型中儘可能好地表示原始值的操作(有一些例外)。
它不採用位模式並在新類型中重新解釋它,例如, (int)3.14
應導致3
它有一個完全不同的位模式(可能)。
因此(char)(int)1
總是1
。
可能的重複[是否此代碼檢查是否存在?](http://stackoverflow.com/questions/3572371/does-this-code-check-for-endianess) –