首页
社区
课程
招聘
[求助]今天在用CHAR数组时,发现个奇怪的现象,求高人解释~
发表于: 2018-1-21 15:47 2729

[求助]今天在用CHAR数组时,发现个奇怪的现象,求高人解释~

2018-1-21 15:47
2729
上代码先
int _tmain(int argc, _TCHAR* argv[])
{
char testcode[] = "\x80\x2e\xe6\xf5";
int a, b;
for (a = 0; a < 4; a++)
{
printf("%x\n", testcode[a]);
}
return 0;
}
按道理来说 应该是逐行打印出 80  2e e6 f5 这样的
但事实不是如此

这是为啥呢···

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 204
活跃值: (911)
能力值: (RANK:1324 )
在线值:
发帖
回帖
粉丝
2
使用unsigned  char类型或者使用%hhx占位符
2018-1-21 15:59
0
雪    币: 27
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用BYTE    就是  unsigned  char
2018-1-21 16:02
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
jackandkx 使用unsigned char类型或者使用%hhx占位符
我是记得在哪本书里看过    说  unsigned    char和char  在内存中是没有区别的···也不知道对不对
2018-1-21 16:05
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
SeriousSnow 用BYTE 就是 unsigned char
感谢回答
2018-1-21 16:06
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
%x  会打印4个字节的内容,另一方面只传一个  char,其实是相当于有符号拓展了这个  char  再传进去
所以原本小于  0  的就会变成那样子,用 unsigned char 之所以是 期待的结果,是因为无符号数会被无符号拓展
2018-1-21 16:38
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
unsigned        char和char    在内存中是一样的,但但打印输出就不一样。
2018-1-21 18:41
0
雪    币: 222
活跃值: (739)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
{0x80,0x2e}
2018-1-21 20:48
0
雪    币: 27
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实就是char是有符号位的。0x80  最高位是1被当成负数。扩展的时候用1,0x2e是正数扩展用0。然后就是你输出的结果。至于为什么负数用1。正数用0。你知道原反补移。。应该不难理解
2018-1-22 02:47
0
雪    币: 30
活跃值: (765)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
printf("%2x\n",  testcode[a]);
2018-1-22 08:59
0
游客
登录 | 注册 方可回帖
返回
//