#include<stdio.h>
int main()
{
    unsigned int unum = 0x80008001;
    short unsigned int *snum = (short unsigned int*)&unum;
    printf("%d\n", *snum);
    printf("%d\n", *(snum+1));
    return 0;
}

输出:
32769
32768

snum指向unum的前两个字节,但其值是unum的最后两个字节,在递增指针之后,value是unum的前两个字节。

因此,这是一个小端系统。
但是,我不确定这种方法是否正确,不知道系统的类型。
合适吗

最佳答案

当您违反严格的别名规则(对于C标准为§6.5/ 7,对于C++为[basic.lval] / 10),您的代码会引发 undefined 的行为。该代码通过完全不同类型的左值访问unum的存储值。使用C++编译器,由于禁止在不相关的指针类型之间进行隐式强制转换,因此上述代码甚至无法编译。

使用charunsigned char别名从对象表示形式访问单个字节,这些类型从严格的别名规则中排除。 Here是示例。

10-08 11:28