最近写C代码时,无意中发现这样一个现象!就是用printf以十六进制打印一部分char型变量时会出现这样的现象,打印出ffffff87之类的一些错误数据。但是好像大部分时间,打印出来又是正常的数据。下面看下下面这个例子。
看到这里会不会觉得有点问题,为什么data是0x87,打印出来确是ffffff87,这不是我们想要的结果!
而data1是0x54,却能打印出正确的值54。
后来通过测试发现出这样一个规律,当字符大于0x80时,就会出现ffffff这样的现象。后来通过查资料,才明白有这样
一种说法。
因为%x格式化的类型是int或unsigned int, 所以字符c会被提升为int,当字符c大于等于0x80时会被当作负数处理,为保留符号位,因此提升时字符c会变为0xffffff80, 显然不正确。
但是我们不希望这种情况出现,所以可以通过下面这种方法来解决该问题:
阅读(3949) | 评论(0) | 转发(0) |