我有点困惑关于字节在struct中的顺序是如何排列的。
假设我有以下的struct:
struct container {
int myint;
short myshort;
long mylong;
};
现在,我想初始化一个类型为
struct container
的变量,就像以下示例一样,但是我想使用数组来实现。struct container container1 = {.myint = 0x12345678,
.myshort = 0xABCD,
.mylong = 0x12345678};
假设
int
和long
的sizeof
为4
,而short
的sizeof
为2
。
假设没有填充。
那么struct
的10 bytes
布局将如何呢?
这是否取决于字节序?
它会像这样吗:
0x12345678 ABCD 12345678
或者像这样:
0x78563412 CDAB 78563412
我希望你能够帮我翻译以下内容:我有一个字符数组:
char buffer[10] = {0};
我希望手动填充这个数组的数据,然后使用memcpy
复制到struct
中。
我应该这样做吗[1]:
buffer[0] = 0x12345678 & 0xFF;
buffer[1] = 0x12345678 >> 8 & 0xFF;
buffer[2] = 0x12345678 >> 16 & 0xFF;
buffer[3] = 0x12345678 >> 24 & 0xFF;
...
buffer[9] = 0x12345678 >> 24 & 0xFF;
或者应该是[2]:
buffer[0] = 0x12345678 >> 24 & 0xFF;
buffer[1] = 0x12345678 >> 16 & 0xFF;
buffer[2] = 0x12345678 >> 8 & 0xFF;
buffer[3] = 0x12345678 & 0xFF;
...
buffer[9] = 0x12345678 & 0xFF;
在我执行 memcpy
前:
memcpy(&container1, buffer, sizeof(container1);
如果我正在写入数组并将其复制到struct
,它是否可移植到不同的系统上,特别是在字节序方面?
编辑: [1]在小端机器上工作,[2]在大端机器上工作吗?