我已经知道测试的存储方式,我可以做如下:字节序测试和类型转换
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) –