gpt4 book ai didi

c - 将数组转换为结构时的数据顺序

转载 作者:行者123 更新时间:2023-11-30 18:57:51 25 4
gpt4 key购买 nike

假设我有以下结构:

typedef struct MyStruct {

unsigned short a; /* 16 bit unsigned integer*/
unsigned short b; /* 16 bit unsigned integer*/
unsigned long c; /* 32 bit unsigned integer*/

}MY_STRUCT;

以及一些数据数组(内容仅供演示):

unsigned short data[] = {0x0011, 0x1100, 0x0001, 0x0FFF }; 

然后我执行以下操作:

MY_STRUCT *ms; 

ms = (MY_STRUCT *) data;

printf("a is: %X\n",(*ms).a);
printf("b is: %X\n",(*ms).b);
printf("c is: %X\n",(*ms).c);

我希望数据按顺序读入毫秒,“从左到右”,在这种情况下,输出为:

a is: 11
b is: 1100
c is: 10FFF

然而实际发生的是:

a is: 11
b is: 1100
c is: FFF0001

为什么会发生这种情况?以这种方式将数组转换为结构时,我应该期望什么行为?

最佳答案

What behavior should i expect when casting arrays to structs this way?

答案是,这取决于情况。欢迎来到字节序的奇妙世界:http://en.wikipedia.org/wiki/Endianness

要点是,您假设数据以您期望人类读取的方式存储。这是大端字节序。不过,您可能使用的是 x86 机器,它是小端字节序。这意味着最高有效数字位于 4 个字节的末尾,而不是开头。这就是为什么您的短片的后半部分会出现在短片的前半部分之前。

使用此方法,您将在不同的架构上获得不同的结果。

关于c - 将数组转换为结构时的数据顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219213/

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