我已经知道要测试字节序,我可以这样做:
bool IsLittleEndian(){
int a = 1;
char* ptr = (char*)&a;
return *ptr;
}
我的问题是,为什么我们不能将int
转换为char
而不是int*
转换为char*
,就像这样。
int a = 1;
char c = (char)a;
这也行吗?否则,我们不能做到这一点的原因是什么?
答案 0 :(得分:9)
int
和char
都是数字类型。由于编译器知道正在使用的体系结构,int
中的1将在char
中变为1,而不管字节顺序如何。我们使用指针来欺骗编译器不操纵数据。
答案 1 :(得分:0)
C中的强制转换是一种尝试在新类型中尽可能好地表示原始值的操作(有一些例外)。
它不采用位模式并在新类型中重新解释它,例如
failOnRuleViolation="yes"
将导致(int)3.14
具有完全不同的位模式(可能)。
因此3
总是(char)(int)1
。