VC中16进制显示问题
答案:1 悬赏:30 手机版
解决时间 2021-04-13 13:41
- 提问者网友:王者佥
- 2021-04-13 00:14
VC中16进制显示问题
最佳答案
- 五星知识达人网友:有你哪都是故乡
- 2021-04-13 01:12
Fins_resp[i]接受到的数据,可以直接显示。通过格式化函数,如scanf("%x",Fins_resp[i])就可以,但相比转换为字符串,则没法一起显示“一串”,只能一个一个来。
if (temp>=0xffffff00);temp=temp-0xffffff00;
确实是一个很绕混人的语句,因为这里使用了有符号数据类型。其结果,是将负数的char(实际上是大于127的字符,转换为128~255之间的正整数。
这里,如果使用的是unsined char和unsigned int,那么这个语句是没有必要的。
temp>=0xffffff00 难点在这里,一个有符号int和0xffffff00比较时,因为后者的首位是1,其实是一个负数(-256),造成的结果是,如果temp是正数,那么是无符号比较(必然后者大),如果temp是负数,必须作为有符号进行比较(必然-256比最小的char小,前者大),这样就是,if(temp<0) temp += 256;一个效果,在int类型中,将负数char变成了unsigned char。
追问非常感谢高手的指点,我还有几处不是很清楚,请高手继续指点一下,谢谢!
Fins_resp[i]接受到的数据通过VC查看器查看出来的是乱码,通过scanf("%x",Fins_resp[i])只是把乱码转变成了字符串?我想知道这些乱码是什么意思?
追答前面笔误,应该是printf而不是scanf。
你查看到乱码,是因为这个char的值对应的ascii码是不可打印字符。默认char的显示和输出,是输出其对应的ASCII字符,比如char的数值是65,那么输出显示会显示字母'A',这是有其数据类型char决定的。因此如果要输出其数值,要么转换为其它数值类型,要么用printf之类的格式化输出方式,指定输出格式(其实itoa也是一种格式化,只是格式化到了一个字符串里面)。
if (temp>=0xffffff00);temp=temp-0xffffff00;
确实是一个很绕混人的语句,因为这里使用了有符号数据类型。其结果,是将负数的char(实际上是大于127的字符,转换为128~255之间的正整数。
这里,如果使用的是unsined char和unsigned int,那么这个语句是没有必要的。
temp>=0xffffff00 难点在这里,一个有符号int和0xffffff00比较时,因为后者的首位是1,其实是一个负数(-256),造成的结果是,如果temp是正数,那么是无符号比较(必然后者大),如果temp是负数,必须作为有符号进行比较(必然-256比最小的char小,前者大),这样就是,if(temp<0) temp += 256;一个效果,在int类型中,将负数char变成了unsigned char。
追问非常感谢高手的指点,我还有几处不是很清楚,请高手继续指点一下,谢谢!
Fins_resp[i]接受到的数据通过VC查看器查看出来的是乱码,通过scanf("%x",Fins_resp[i])只是把乱码转变成了字符串?我想知道这些乱码是什么意思?
追答前面笔误,应该是printf而不是scanf。
你查看到乱码,是因为这个char的值对应的ascii码是不可打印字符。默认char的显示和输出,是输出其对应的ASCII字符,比如char的数值是65,那么输出显示会显示字母'A',这是有其数据类型char决定的。因此如果要输出其数值,要么转换为其它数值类型,要么用printf之类的格式化输出方式,指定输出格式(其实itoa也是一种格式化,只是格式化到了一个字符串里面)。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯