好的,所以我正在尝试打印结构的十六进制值。现在我的打印功能执行以下操作:
int len = sizeof(someStruct);
unsigned char *buffer = (unsigned char*)&someStruct;
int count;
for(count = 0; count < len; count++) {
fprintf(stderr, "%02x ", buffer[count]);
}
fprintf(stderr, "\n");
这是结构的定义:
struct someStruct {
unsigned char a;
short myShort;
} __attribute__((packed)) someStruct;
按预期打印出的这个结构的长度是(在控制台上输出):
sizeof(someStruct): 3 字节
这里的问题是我遇到的以下问题。有一个短路,我设置了一个值。
someStruct.myShort = 0x08;
现在这个短是 2 个字节长。然而,当它被打印到控制台时,它不会显示最重要的 0x00。这是我得到的输出,
stderr: 00 08
但是,我想要以下输出(3 个字节长),
stderr: 00 00 08
如果我用 0xFFFF 填充short,那么我会得到 2 字节输出,但是,只要有前导 0x00,它就不会将前导 0x00 输出到控制台。
关于我做错了什么的任何想法。可能我认为我忽略了一些小东西。