大家经常会遇到将 调试信息例如从网络收到的数据包 或者 转换后的数据 打印出来,调试问题。

如果以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的更多相关文章

  1. 格式化输出%02hhx

    每次看到人家的十六进制输出,对齐的很好,ff就显示了,而我的总是0xffffffff.如果是"%02x",是以0补齐2位数,如果超过2位就显示实际的数:"%hhx&quo ...

  2. [转载]iOS 10 UserNotifications 框架解析

    活久见的重构 - iOS 10 UserNotifications 框架解析 TL;DR iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...

  3. iOS 10 UserNotifications 框架解析

    摘自:https://onevcat.com/2016/08/notification/ iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifica ...

  4. C++中关于类型转换的问题讨论

    这里以signed/unsigned char, signed/unsigned short, signed/unsigned int类型为例, 讨论一下基本类型转换的基本原理,这样我们在编程中碰到由 ...

  5. C语言学习笔记--类型定义&联合

    一.类型定义 C语言自定义数据类型 (typedef) C语言提供一个叫做typedef的功能来声明一个已有的数据类型的新名字. typedef int Length; 使得Length成为int类型 ...

  6. swift 获取文件的Md5值

    获取文件的Md5值的方法如下 func md5File(url: URL) -> String? { let bufferSize = 1024 * 1024 do { //打开文件 let f ...

  7. 听翁恺老师mooc笔记(13)--类型定义和联合

    typedef 虽然我们知道使用struct这个关键字定义一个结构类型,然后可以使用该结构类型定义变量.但是每次要使用的时候都需要带着struct这个关键字,那么如何摆脱这个关键字哪?C语言提供了一个 ...

  8. [C语言]进阶|结构类型: 枚举, 结构, 类型定义

    --------------------------------------------------------------------- 枚举: // main.c #include <std ...

随机推荐

  1. 20164324王启元 Exp4恶意代码分析

    一.实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果. 安装配置sysinternals里的sys ...

  2. 如何去除内联元素(inline-block元素)之间的间距

    <body><a href="http://www.baidu.com">百度</a><a href="http://www.i ...

  3. MySQL插入记录 insert

    一.insert insert tb_name [(col_name,......)] {values | value} ({expr | default } ....... ) , ( ... ) ...

  4. centos 7编译安装apache

    1.安装工具和依赖包 yum install unzipyum -y install gcc gcc-c++ 2.创建软件安装目录mkdir /usr/local/{apr,apr-util,apr- ...

  5. JavaScript HTML DOM学习记录

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过 ...

  6. django notes 三:Template 的查找

    django 中有 2种 Template Loader django.template.loaders.filesystem.Loader django.template.loaders.app_d ...

  7. Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)

    Silverlight中的动画(Animation)与视图状态管理(Visual State Manager) 结合使用是非常常见的,动画用于管理对象在某段事件段内执行的动画动作,视图状态管理则用于控 ...

  8. 西数常用TREX命令

    西数常用TREX命令 trex命令:dut1 简便找盘idp或info did查看硬盘信息chkresfall检测固件smart 查看SMART表clrsmart 清SMART表svmod 0x.. ...

  9. mysql client does not support authentication

    打开mysql 命令行 mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456 ...

  10. Javaee的Dao层的抽取

    有时候我们在实现不同功能的时候回看到很多的Dao层的增加.修改.删除.查找都很相似,修改我们将他们提取BaseDao 一.提取前 1. 提取前的LinkDao层: public interface L ...