为什么printf()在实际数据之前打印ffffff。 C [重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么printf()在实际数据之前打印ffffff。 C [重复]相关的知识,希望对你有一定的参考价值。
printf()函数打印领先的ffffff(从技术上讲,我理解最重要的位带有符号,所以它一直被带到数据开始的地方)。但是如何摆脱它们我不知道为什么会发生?
int mem_display(Cmd *cp, char *arguments)
{
int i;
char *adr;
if (!sscanf(arguments,"%x",&adr))
{
return 0;
}
printf("%#0.8s ",arguments);
for (i=0; i<16; i++) {
printf("%02.x ",(unsigned int)*(adr+i));
}
...
输出:
% UNIX> md 10668
/*calling function show memory location 0x10668*/
OUT:
10668 ffffffbc 10 20 ffffffe0 ffffffa0 40 ffffffa2 ffffffa0 44 ffffff9c 23 ffffffa0 20
解决了:
printf("%0.2x ",(unsigned int)*(adr+i));
输出:
UNIX> md 10000
10000 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 .ELF............
答案
投射到unsigned char
让系统认为*(adr+i)
是无符号的,因此不会进行符号扩展。
for (i=0; i<16; i++) {
printf("%02.x ",(unsigned char)*(adr+i));
}
另一答案
请阅读printf()
manual,这是正确的方法
printf("%02x ", (unsigned char) adr[i]);
注意:请勿使用此*(a + i)
表示法,特别是在施法时。取消引用指针并不是一种坏方法,它在这种特定情况下是不合适的。
以上是关于为什么printf()在实际数据之前打印ffffff。 C [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 printf 语句中的第一个值之前打印第二个值的原因是啥? [复制]
STM32为啥要用重定向printf来打印串口数据?直接用串口发送函数不行吗
pyspark:打印数据框时,为什么看不到实际值?我刚得到DataFrame [avg(Rate):double]