代码回顾:关于写代码时cout 和printf 输出16进制数的简单思考
来源:互联网 发布:经典句子 知乎 编辑:程序博客网 时间:2024/06/16 19:23
好吧,我承认自己很low,为这些东西烦恼,不过自认为基础一直是很重要的,尤其是对我这样的。。。
1、今天在用cout 输出 unsigned char 形式的数据时,控制台显示的是乱码,改用printf 的形式输出,解决了这个问题,这在C/C++中比较容易混淆。
unsigned char i=0xaa;char j=1;cout<<i; //输出乱码cout<<j; //输出乱码
cout<<(int)i; //可以printf(“%x”,i) //可以
现在总结如下:
unsigned char的类型归根结底还是整型,关键要看它是以字符形式还是整型打印出来。
对象操作符<<对char整型做了处理,如果是字符形式的就直接输出,如果不是字符类型,就按照整型的格式输出,j=1时,以ASCII格式存储,但是不能 打印,所以是乱码, 可以用强制转换类型实现输出,所以条件许可的话,最好还是利用printf函数实现按格式输出。减少歧义。
2.另外一种情况
char i=0xf0;printf("%X",i);//输出fffffff0这种情况是由于程序在识别符号的时候造成的,通常一般将i设置为unsigned char的格式。
按照网友的说法,挺好的,我不再修改了:
0xf0(char) 压入函数参数栈 是不是就变成了 0xfffffff0(int) ?
假如你还不能理解,可以这么想:
b[1] = 0xf0; 也就是 b[1] = -16;
int param = b[1]; 此时 param 是不是应该等于 -16 ?
int类型的-16是不是就是 0xfffffff0 ?
按照C语言标准,你应该将 %02x 改为 %02hhx,也就是加两个 h
但假如你用的是比较垃圾的VC,那就只能用 printf("b[1] is %02x\n",(unsigned char)b[1]); 了
0 0
- 代码回顾:关于写代码时cout 和printf 输出16进制数的简单思考
- 关于写代码的一些思考
- printf 与 cout 输出格式的简单比较
- 为什么 printf 和 cout 的输出顺序有问题呢??
- 一段代码引起的思考-------printf
- cout 和 printf 输出先后问题
- printf和cout 数字格式化输出对比
- cout和printf输出结果不一样
- 关于cout和printf的压栈顺序问题
- 关于cout和printf的压栈顺序问题
- cout和printf的混用
- printf和cout的区别
- printf()和cout的区别
- cout和printf的区别
- printf和cout的速度
- cout和printf的区别
- cout和printf的区别
- 写代码之前的思考
- java--概述与控制台输入
- C#中Ilist与list的区别小结
- java https请求 源码 微信
- JS中的call和apply
- [BZOJ 1179] Atm · 图的联通 & SPFA
- 代码回顾:关于写代码时cout 和printf 输出16进制数的简单思考
- 黑马程序员——高新技术---字符串变量
- 06-图6. 公路村村通(30)
- Linux网络编程——tcp并发服务器(epoll实现)
- 淘宝ip地址查询接口
- linux环境部署 tomcat jdk mysql数据库的部署及配置总结
- BUAA 1193
- Linux内核配置编译
- nginx+tomcat+memcached集群、负载均衡