%02hhX
大家经常会遇到将 调试信息例如从网络收到的数据包 或者 转换后的数据 打印出来,调试问题。
如果以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进制形式,不过要注意 字节序问题。
%02hhX的更多相关文章
- 格式化输出%02hhx
每次看到人家的十六进制输出,对齐的很好,ff就显示了,而我的总是0xffffffff.如果是"%02x",是以0补齐2位数,如果超过2位就显示实际的数:"%hhx&quo ...
- [转载]iOS 10 UserNotifications 框架解析
活久见的重构 - iOS 10 UserNotifications 框架解析 TL;DR iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...
- iOS 10 UserNotifications 框架解析
摘自:https://onevcat.com/2016/08/notification/ iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...
- C++中关于类型转换的问题讨论
这里以signed/unsigned char, signed/unsigned short, signed/unsigned int类型为例, 讨论一下基本类型转换的基本原理,这样我们在编程中碰到由 ...
- C语言学习笔记--类型定义&联合
一.类型定义 C语言自定义数据类型 (typedef) C语言提供一个叫做typedef的功能来声明一个已有的数据类型的新名字. typedef int Length; 使得Length成为int类型 ...
- swift 获取文件的Md5值
获取文件的Md5值的方法如下 func md5File(url: URL) -> String? { let bufferSize = 1024 * 1024 do { //打开文件 let f ...
- 听翁恺老师mooc笔记(13)--类型定义和联合
typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...
- [C语言]进阶|结构类型: 枚举, 结构, 类型定义
--------------------------------------------------------------------- 枚举: // main.c #include <std ...
随机推荐
- IDEA里运行代码时出现Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger的解决办法(图文详解)
不多说,直接上干货! 问题详情 运行出现log4j的问题 -classpath "C:\Program Files\Java\jdk1.8.0_66\jre\lib\charsets.jar ...
- 关于在真实物理机器上用cloudermanger或ambari搭建大数据集群注意事项总结、经验和感悟心得(图文详解)
写在前面的话 (1) 最近一段时间,因担任我团队实验室的大数据环境集群真实物理机器工作,至此,本人秉持负责.认真和细心的态度,先分别在虚拟机上模拟搭建ambari(基于CentOS6.5版本)和clo ...
- 在web应用中使用文件
使用HTML5 DOM新增的File API,现在可以让网页要求用户选择本地文件,并且读取这些文件的信息了.选择的方式既可以是HTML<input> 元素,也可以是拖拽 . 你可以在chr ...
- [转]Supporting OData Query Options in ASP.NET Web API 2
本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/suppor ...
- 致命id(就是一个神经病精神分裂的故事---但讲述方式真的很不错)
电影开头是一段审讯的录音(我听着像),一直在问那个精神分裂的人一件谋杀案,镜头然后转向了一个场景(这个场景中设定是一个被大雨围困的汽车旅馆,到后半部分我才明白这是那个精神分裂者的精神世界,这个地方的所 ...
- .Net Core GB2312编码问题
1.今天抓取了一个网页的源代码.发现中文是乱码的,马上第一反应是编码问题..... 2.仔细一看基于WebClient写的代码,还真的是没有设置编码... /// <summary> // ...
- JavaScript数组循环遍历之forEach
1. js 数组循环遍历. 数组循环变量,最先想到的就是 for(var i=0;i<count;i++)这样的方式了. 除此之外,也可以使用较简便的forEach 方式 2. forEac ...
- 初步理解impress.js
1.认识impress.js impress.js 采用 CSS3 与 JavaScript 语言完成的一个可供开发者使用的表现层框架(演示工具). 现在普通开发者可以利用 impress.js 自己 ...
- thinkphp引入头文件
<include File="Public:regheader" />
- java.util.concurrent.CyclicBarrier 使用
1.概述 java.util.concurrent.CyclicBarrier(循环的栅栏), 构造时设置一个计数器数(count), 各线程通过调用barrier.await()进入等待,并且计数+ ...