C++ 以十六进制打印数据结构值
输出(十六进制ABC指令): 我想知道为什么第一个元素的输出包含4个字节:C++ 以十六进制打印数据结构值,c++,C++,输出(十六进制ABC指令): 我想知道为什么第一个元素的输出包含4个字节:ffffc8,而我希望它只打印c8 感谢您告诉printf()将从string\u ptr指向的地址返回的内容视为无符号int(我猜在您的系统中是32位长),而不是无符号char 试试这个: ffffffc8 0 64 0 64 0 使用printf格式说明符中的width选项可以打印任意数量的地址字符。例如,这里您可以使用%2X作为格式说明符。这样做是因为您打印的字符的第一位是1,因此字符被解释为负数。当您使
ffffc8
,而我希望它只打印c8
感谢您告诉
printf()
将从string\u ptr
指向的地址返回的内容视为无符号int
(我猜在您的系统中是32位长),而不是无符号char
试试这个:
ffffffc8 0 64 0 64 0
使用printf格式说明符中的width选项可以打印任意数量的地址字符。例如,这里您可以使用%2X作为格式说明符。这样做是因为您打印的字符的第一位是
1
,因此字符被解释为负数。当您使用默认的%x
格式打印时,要打印的值被解释为int
(比char
大得多)。因此,符号指向所有其他位置,使您可以看到输出中的f
s
一种修复方法是使用%hhx
打印(您告诉printf
您正在打印无符号字符
值)
另一个修复方法是将字符串的类型更改为无符号字符
printf(" %hhx ", *string_ptr++);
或者,您可以将它们组合起来。这只会隐藏问题:)
unsigned char *string_ptr = (unsigned char *)&A2;
kk = sizeof(AbcStruct);
while(kk--)
{
unsigned char c = *string_ptr++;
printf(" %x ", (unsigned)c);
}
printf(" %hhx ", *string_ptr++);
unsigned char *string_ptr = (char *)&A2;