[英]printing of a Data struct values in hex
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
。
谢谢
这样做是因为您要打印的char的第一位是1
,因此char被解释为负数。 当您使用默认的%x
格式进行打印时,要打印的值被解释为一个int
(比char
大得多)。 因此,符号被复制到所有其他位置,使您在输出中看到那些f
s。
一种解决方法是使用%hhx
进行打印(您告诉printf
您正在打印unsigned char
值)。
printf(" %hhx ", *string_ptr++);
另一个解决方法是将string_ptr
的类型更改为unsigned char
unsigned char *string_ptr = (char *)&A2;
或者,您可以将它们合并。
您要告诉printf()
将string_ptr
指向的地址返回的string_ptr
视为unsigned int
(我猜它在系统上为32位长),而不是unsigned char
。
尝试这个:
unsigned char *string_ptr = (unsigned char *)&A2;
kk = sizeof(AbcStruct);
while(kk--)
{
unsigned char c = *string_ptr++;
printf(" %x ", (unsigned)c);
}
在printf格式说明符中使用width选项可根据需要打印尽可能多的地址字符。 例如,在这里您可以使用%2X作为格式说明符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.