gpt4 book ai didi

c - Little Endian 与 Big Endian 数据结构会改变我的答案吗?

转载 作者:行者123 更新时间:2023-12-02 12:01:13 24 4
gpt4 key购买 nike

我遇到了以下问题:

int i[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; 
int *p;

在具有 32 位整数的 Big Endian 机器上,i[0] 从地址 1,242 开始。

以下语句后 p 等于什么?

p = &i[2] + 4;
i[0] = *(p + 5) - 8;

结果:

p = 1242 + 4 * (2 + 4) = 1,266
i[0] = i[(6 + 5)] – 8 = 3

如果这是在 Little E 机器上,我的解决方案会改变吗?

最佳答案

What does p equal after the following statement?

p 将具有相同的值。您只需为其分配一些地址 - 例如这里:p = &i[2] + 4,这与字节序无关。

如果您在同一台计算机上运行整个代码i[0] 的值也不会改变;因为您正在操作“整个”整数,而不是使用 char 指针读取 4 字节整数的第一个字节。

例如如果你有

int x = 1;
unsigned char * y = (unsigned char*) &x;

那么 *y 在小端机器上等于 1,在大端机器上等于 0。

<小时/>

如果客户端将此数组发送到另一台机器,则情况会有所不同,那么这完全取决于客户端如何序列化它(例如哪种字节序)以及服务器如何解释它。然后字节顺序问题可能会发挥作用(例如,因为客户端和服务器可能具有不同的字节顺序)。

这里是more阅读本文以帮助您理解这个概念。

关于c - Little Endian 与 Big Endian 数据结构会改变我的答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919517/

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