%02hhX
2018-06-18 04:18:26来源:未知 阅读 ()
大家经常会遇到将 调试信息例如从网络收到的数据包 或者 转换后的数据 打印出来,调试问题。
如果以ascii码打印的话,控制字符和ascii码以外的字符不能很好的查看具体值(看不到,或者乱码,尤其对于网络报文)。
如果以16进制形式打印出来,就避免了这个问题。
输出的格式经常不标准,对于一个字节 有时占1个字节空间7F,有时占8个字节空间FFFFFFFE。
现在就告诉大家一个标准的格式,不用考虑,内存空间是 有符号的字符串,还是无符号的字符串,亦或是 类型转换等。
char *src;
printf("%02hhX", src);
hh 标示以一个字节char类型打印值。类似于h标示以一个short类型打印值一样。(事实上就是内存空间的大小不一样而已,char,short,int 如果都是无符号数,标示的值一样,仅仅所占空间大小不同)
%X标示以16进制形式打印一个整数(int ,四个字节),对于unsigned或者signed的int来说,内存中存储的值一样,只是表示的值不一样而已。
举个例子,一个char 类型存储的值为 0xFF,二进制就是8个位都是1, unsigned 标示 255,signed 标示 -1。
hh和X组合标示 以一个char类型打印一个整数,将四个字节的整数截断成一个字节打印出来。
02 不够2位的前边补0 补成两位打印出来,超过2位的以实际长度打印出来,
对于%02hhx,hhx已经以一个字节打印了,加上02限制,不够两位的补成两位。
对于:
char a = '\xAB';
printf("%02X", a); //FF FF FF AB(最高位为1,符号扩展前面都补1, FF FF FF AB)
unsigned char a = '\xAB';
printf("%02X", a); //AB(无符号char,前面补0,实际上打印的值还是四个字节00 00 00 AB,只是前面都是0,所以以2位显示出来而已)
所以 优选 %02hhX打印。
说明:以上一个int占4个字节,是在32位系统上。
%X以大写字母打印十六进制
%x以小写字母打印十六进制
char a = '\12' 八进制整数12
char a= '\012' 八进制整数12
char a='\x12' 十六进制整数12
linux 中有个 hexdump 打印文件的16进制形式,不过要注意 字节序问题。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:C语言范例学习03-上
- 线段树 2019-11-28
- C++和c语言的区别 2019-10-16
- 相似基因 2019-08-16
- C++自学教程第一课——你好世界,我是柠檬鲸。 2019-05-22
- P1491 集合位置 2019-05-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash