字节序测试和类型转换

3

我知道测试字节序的方法如下:

bool IsLittleEndian(){

   int a = 1;

   char* ptr = (char*)&a;

   return *ptr;
}

我的问题是,为什么我们不能像这样将 int 强制转换为 char,而不是像上面那样将 int* 转换为 char*

int a = 1;

char c = (char)a;

这样做可以吗?如果不行,我们不能这样做的原因是什么?

可能是这段代码是否检查了字节顺序?的重复。 - John_West
2个回答

9

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


0
在C语言中,类型转换是一种操作,它试图尽可能好地表示原始值在新类型中的值(有一些例外)。
它不会采用位模式并在新类型中重新解释它,例如(int)3.14应该得到3,这个值具有完全不同的位模式(很可能如此)。
因此,(char)(int)1总是1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接