2015-10-19 71 views
3

我已经知道测试的存储方式,我可以做如下:字节序测试和类型转换

bool IsLittleEndian(){ 

    int a = 1; 

    char* ptr = (char*)&a; 

    return *ptr; 
} 

我的问题是,为什么我们不能只投intchar而不是int*char*以上,喜欢这个。

int a = 1; 

char c = (char)a; 

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

+0

可能的重复[是否此代码检查是否存在?](http://stackoverflow.com/questions/3572371/does-this-code-check-for-endianess) –

回答

9

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

0

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

它不采用位模式并在新类型中重新解释它,例如, (int)3.14应导致3它有一个完全不同的位模式(可能)。

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