gpt4 book ai didi

c - 字节顺序和位移位问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:43:45 26 4
gpt4 key购买 nike

我正在 Mac 上用 C 做一些实验(应该是小端架构),我注意到一个奇怪的事实,试图打印 uint16_t 变量的低字节和高字节。

使用值 65534(十六进制为 0xFFFE,大端),使用下面的代码,我期望第一个 printf 会打印出来0xFE FF,而第二个 0XFF FE。结果反而相反,为什么?

int main(){

uint16_t x=65534;
uint16_t y=htons(x);

printf("%02x %02x\n",((uint8_t*)&x)[0],((uint8_t*)&x)[1]); //prints fe ff
printf("%02x %02x\n\n",((uint8_t*)&y)[0],((uint8_t*)&y)[1]); // prints ff fe


printf("%02x %02x\n",x>>8,(uint8_t)x);//prints ff fe
printf("%02x %02x\n",y>>8,(uint8_t)y);//prints fe ff

return 0;
}

最佳答案

在这个回答中我假设:

  1. 代码中的注释是正确的,并且描述了实际发生的情况,而不是您想要发生的情况。
  2. 因此您的问题涉及第二对 printf。
  3. 您在基于 Intel 的 Mac 上运行(确实是小端)。

C 的位移运算符的结果与字节序无关。如果 x 是一个 uint16_tx>>8 将始终返回 x 的高字节,无论是否该字节存储在 x 的内存表示的第一个或第二个字节中。

关于c - 字节顺序和位移位问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57891163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com