%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 ...
随机推荐
- Oracle Profile文件
一.Profile文件概述:Profiles是Oracle安全策略的一个组成部分,当Oracle建立数据库时,会自动建立名称为Default的profile,当建立用户没有指定profile,那么or ...
- 我java学习时的模样(一)
学会敲键盘,能够实现盲打 程序员写代码,是通过键盘将程序输入到编辑器中,而码子的高效,能够让自己的思路更流畅一些.如果想从事IT工作,那面打字就必须得会,并且,如果还一个一个字母去找,上司就会认为是一 ...
- JavaScript中变量的LHS引述和RHS引用
JavaScript中变量的LHS引述和RHS引用 www.MyException.Cn 网友分享于:2015-02-04 浏览:0次 JavaScript中变量的LHS引用和RHS引用 在Jav ...
- Memcached 查询stats及各项状态解释
一.两个最常用状态查询(掌握第一个就完全OK了) 1)查看状态:printf “stats\r\n” |nc 127.0.0.1 11211 2)模拟top命令查看状态:watch “ech ...
- PostgreSQL On Windows Process Connection Performance
本文主要对PostgreSql在Windows下的连接测试. 测试环境: Win7 x64, PostgreSql 10.1 x64 测试语言: VS2015 C# 因为Pg的数据库连接是开启进程来处 ...
- SQL 工具系列二
1.RedGate 工具 SQL Prompt 脚步智能提示工具 脚步提示工具,轻松写入,编辑和探索SQL: SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为 ...
- JS实现队列
JS实现队列: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为队尾 ...
- tsung
要做针对mongodb的压力测试,下了个tsung,看看他的策略是什么,目前定位ts_launcher.erl:do_launch({Intensity, MyHostName, PhaseId})- ...
- git记住提交密码的技巧
修改.git包里面的config文件,添加 [credential] helper = store
- 一、IOC和DI的概念
IOC---Inversion of Control (控制反转) 在java中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你对象内部直接控制. 谁控制谁,控制什么 -->IOC ...