我有两个32位整数和两个16位整数。如何将它们组合成内核中的一个12字节长数组?
答案 0 :(得分:2)
这是一种(C99)方式,如果你想要机器的本机字节排序:
union {
struct {
uint32_t a, b;
uint16_t c, d;
} ints;
char bytes[12];
} tmp;
tmp.ints.a = 0xdeadf00d;
tmp.ints.b = 0xfeedbabe;
tmp.ints.c = 0xfee1;
tmp.ints.d = 0x600d;
现在,您可以访问tmp.bytes
数组以获取组成数字的字节。在ideone上,bytes
包含:
0d f0 ad de be ba ed fe e1 fe 0d 60
您可能希望添加一些(特定于编译器的)填充指令,以确保整数是"打包"。不过,上面的内容对于许多编译器来说都是不错的。
答案 1 :(得分:-1)
char a[12];
char* b = &a[0];
int* c = (int*)b;
c[0] = n1;
c[1] = n2;
short* d = (short*)(b + 8);
d[0] = s1;
d[1] = s2;
编辑:当这些状态保留在函数中时,就没有严格的别名问题。
此外,如果您想了解有关别名的更多信息,请从GCC的源代码中找到此函数:c_common_get_alias_set