typedef struct AbcStruct{
short LD;
short EL;
short CL;
AbcStruct( short b, short res = 0, short lr = 1000): LD( b ), EL(res), CL( lr ) { }
};
int main ()
{
struct AbcStruct A2(200, 100, 100);
char *string_ptr = (char *)&A2;
kk = sizeof(AbcStruct);
while(kk--)
printf(" %x ", *string_ptr++);
}
输出(十六进制的 AbcStruct):
ffffffc8 0 64 0 64 0
我想知道为什么第一个元素的输出包含 4 个字节:ffffffc8
而我期望它只会打印 c8
。
谢谢
最佳答案
这样做是因为您正在打印的字符的第一位是 1
,因此字符被解释为负数。当您使用默认的 %x
格式打印时,要打印的值被解释为 int
(比 char
大得多).因此,符号 gets copied到所有其他位置,使您在输出中看到那些 f
。
一个修复方法是使用 %hhx
进行打印(您告诉 printf
您正在打印 unsigned char
值)。
printf(" %hhx ", *string_ptr++);
另一个修复方法是将 string_ptr
的类型更改为 unsigned char
unsigned char *string_ptr = (char *)&A2;
或者,您可以将它们结合起来。
关于c++ - 以十六进制打印数据结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430502/