这段代码将如何在大端机器上运行?

Jee*_*tel 5 c endianness

如果我有代码:

uint64_t a = 0x1111222233334444;
uint32_t b = 0;
b = a;
printf("a is %llx ",a);
printf("b is %x ",b);
Run Code Online (Sandbox Code Playgroud)

输出是:

 a is 1111222233334444 b is 33334444
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 大端机器上的行为是否相同?

  2. 如果我在b中指定一个值或者进行类型转换,那么大端的结果是否相同?

Mys*_*ial 9

你在那里的代码将以相同的方式工作.这是因为向下转换的行为由C标准定义.

但是,如果你这样做:

uint64_t a = 0x0123456789abcdefull;
uint32_t b = *(uint32_t*)&a;
printf("b is %x",b)
Run Code Online (Sandbox Code Playgroud)

然后它将依赖于endian.

编辑:

Little Endian:b是89abcdef

Big Endian:b是01234567

  • 对于我给出的这个例子:在little-endian上,结果是89abcdef.在big-endian上,结果可能是01234567. (2认同)