void prthex(const void *b,size_t sz)
{
for(int i = 0;i <sz;++i)
{
printf("%02X",((char*)b)[i]);
}
printf("\n");
}
然后我传入一个buffer
prthex(buf, 24);
linux下结果:
6A5B9803BD38539905177389EB2006260D0A7E40C83DD070BA
windows下结果:
6A5BFFFFFF9803FFFFFFBD3853FFFFFF99051773FFFFFF89FFFFFFEB2006260A7E40FFFFFFC83DFFFFFFD070FFFFFFBA
经过研究,如果我把
printf("%02X",((char*)b)[i]);
改成
printf("%02X",((unsigned char*)b)[i]);
则两平台均正常,产生诡异FFFF的地方为对应整数为“负数”的字节
理论上,printf第一个参数后为可变参数,无论我以什么类型传入,函数内看到的数据是一样的,而且强类型转换也不会改变变量背后的数据,但以上结果又让我迷惑了
{
for(int i = 0;i <sz;++i)
{
printf("%02X",((char*)b)[i]);
}
printf("\n");
}
然后我传入一个buffer
prthex(buf, 24);
linux下结果:
6A5B9803BD38539905177389EB2006260D0A7E40C83DD070BA
windows下结果:
6A5BFFFFFF9803FFFFFFBD3853FFFFFF99051773FFFFFF89FFFFFFEB2006260A7E40FFFFFFC83DFFFFFFD070FFFFFFBA
经过研究,如果我把
printf("%02X",((char*)b)[i]);
改成
printf("%02X",((unsigned char*)b)[i]);
则两平台均正常,产生诡异FFFF的地方为对应整数为“负数”的字节
理论上,printf第一个参数后为可变参数,无论我以什么类型传入,函数内看到的数据是一样的,而且强类型转换也不会改变变量背后的数据,但以上结果又让我迷惑了
