让我们说我有一些类似的结构:
struct a {
uint8_t v1[6];
uint16_t type;
uint8_t v2[6];
uint32_t something_long;
};
struct b {
uint8_t v3;
uint8_t v4;
};
struct c{
a a;
b b;
}
我填写数据(这是正确的吗?):
int main() {...
c my_struct;
my_struct.a.v1[0] = 0x01;
my_struct.a.v1[1] = 0x02;
.
.
.
my_struct.a.type = 2048; // <- does this integer convert to "hex"?
现在我要实现的目标是获取my_struct
并从u_char buff
my_struct
u_char buff[sizeOf(c)];
someConversionStuffHere(c, buff);
//function returns data like:
//buff[0] = 0x01; //wanted result
//buff[1] = 0x02; //wanted result
所以我可以使用buff
并在需要u_char作为参数的第三方库中使用它。
我尝试过一些疯狂的事情:
循环播放并使用sscanf()
,我的意思是我可以使用以下格式打印出c
十六进制:
u_char *string_ptr = (U_char *)&p;
int i = sizeof(c);
while(i--) {
u_char c = *string_ptr++;
printf(" %x ", (u_char) c);
}
这打印&#34;正确&#34;值uint8_t v1[6]
和uint8_t v2[6]
,但当我尝试将2048打印为十六进制(应为0x800
)时,它会打印0 8
而不是08 00
我希望如此。
我很想调试这个,但是C / C ++不是PHP,我可以原始地打印出任何没有问题的东西。
答案 0 :(得分:1)
是的,@Mats说的是正确的:这是因为 endianness ..你可以看到一个关于&#34;正在进行的内容的说明&#34;在维基百科页面上:http://en.m.wikipedia.org/wiki/Endian