C++ 以十六进制打印数据结构值

C++ 以十六进制打印数据结构值,c++,C++,输出(十六进制ABC指令): 我想知道为什么第一个元素的输出包含4个字节:ffffc8,而我希望它只打印c8 感谢您告诉printf()将从string\u ptr指向的地址返回的内容视为无符号int(我猜在您的系统中是32位长),而不是无符号char 试试这个: ffffffc8 0 64 0 64 0 使用printf格式说明符中的width选项可以打印任意数量的地址字符。例如,这里您可以使用%2X作为格式说明符。这样做是因为您打印的字符的第一位是1,因此字符被解释为负数。当您使

输出(十六进制ABC指令):

我想知道为什么第一个元素的输出包含4个字节:
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;