char printf %x问题
char sOption[5];
memset(sOption,0x80,5);
for(i=0;i<5;i++)
printf("\nsOption[%d]=%x\t",i,sOption[i]);
打印出来的是
sOption[0]=ffffff80
sOption[1]=ffffff80
sOption[2]=ffffff80
sOption[3]=ffffff80
sOption[4]=ffffff80
unsignedchar sOption[5];
memset(sOption,0x80,5);
for(i=0;i<5;i++)
printf("\nsOption[%d]=%x\t",i,sOption[i]);
打印出来的是
sOption[0]=80
sOption[1]=80
sOption[2]=80
sOption[3]=80
sOption[4]=80
为什么前面那种方式会打印前面的FFFFFF呢?
[解决办法]
%d都会扩展为int类型,0x80的符号位为1,所以做符号扩展的时候,无符号数前面填充0为00000080,有符号数前面填充1为ffffff80。