结束性测试和类型铸造

时间:2015-10-19 04:14:46

标签: c++ c endianness

我已经知道要测试字节序,我可以这样做:

bool IsLittleEndian(){

   int a = 1;

   char* ptr = (char*)&a;

   return *ptr;
}

我的问题是,为什么我们不能将int转换为char而不是int*转换为char*,就像这样。

int a = 1;

char c = (char)a;

这也行吗?否则,我们不能做到这一点的原因是什么?

2 个答案:

答案 0 :(得分:9)

intchar都是数字类型。由于编译器知道正在使用的体系结构,int中的1将在char中变为1,而不管字节顺序如何。我们使用指针来欺骗编译器不操纵数据。

答案 1 :(得分:0)

C中的强制转换是一种尝试在新类型中尽可能好地表示原始值的操作(有一些例外)。

它不采用位模式并在新类型中重新解释它,例如 failOnRuleViolation="yes"将导致(int)3.14具有完全不同的位模式(可能)。

因此3总是(char)(int)1