gpt4 book ai didi

c - 联盟和字节顺序

转载 作者:太空狗 更新时间:2023-10-29 15:00:45 25 4
gpt4 key购买 nike

typedef union status
{
int nri;
char cit[2];
}Status;

int main() {
Status s;
s.nri = 1;
printf("%d \n",s.nri);
printf("%d,%d,\n",s.cit[0],s.cit[1]);
}

输出:

1
0,1

我知道第二行的输出取决于 CPU 的字节顺序。我如何在独立于平台的程序中编写这样的程序?有没有办法检查 CPU 的字节顺序?

最佳答案

您可以使用 htonl() and/or ntohl() . htonl() 代表“host to network long”,而 ntohl() 代表“network to host long”。 “主机”和“网络”指的是字节顺序。网络字节顺序是“big-endian”。如果主机平台也是“big-endian”,则操作将是无操作的。使用这些例程,以下程序将始终报告相同的输出:

uint32_t x = htonl(1);
unsigned char *p = (void *)&x;
printf("%u %u %u %u\n", p[0], p[1], p[2], p[3]);
uint32_t y = ntohl(x);
assert(y == 1);

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

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