网站站长要会什么用,免费建设dj网站,淘宝店有给网站做优化am,旅游网站建设现状python输出16进制不带0x补零#xff0c;整数转16进制#xff0c;字符串转16进制在开发中#xff0c;我们偶尔会遇到需要将数据通过控制台打印出来#xff0c;以检查数据传输的准确性。例如调试服务端刚接到的二进制数据(里面包含很多非可见字符#xff0c;也就是ascii码之…python输出16进制不带0x补零整数转16进制字符串转16进制在开发中我们偶尔会遇到需要将数据通过控制台打印出来以检查数据传输的准确性。例如调试服务端刚接到的二进制数据(里面包含很多非可见字符也就是ascii码之外的字节值或是字节值不是字母和数字的是一些特殊符号)如物联网的mqtt协议的信息以及我们自定义的二进制应用协议而不是基于可见字符或json组装的信息流。但我们希望看到的是类似这样的信息“0a 53 49 b7 fc 2e”。这些二进制数据如果直接用print()函数打印则在控制台看到的是以字节值代表的字符形式看到的很多就是乱码。如果用python里的hex()函数转一下再依次输出会在每个前面都带有“0x”字符并且01会打印成1看起来就很不整齐感觉比较乱并且打印的时候要人为在每个字节后面加入空格才能分开字节。经过实践我们可以通过格式化输出将字节值变成16进制字符后再用join()函数输出就可以实现我们要的效果了想打印字符串的ascii值也可以只不过先用ord()函数转一下下面是我封装的两个函数分别对应字节类型和字符串类型的输出调试通过仅供参考。打印字节类型的# 字节列表以16进制格式打印数据def print_bytes_hex(data):lin [%02x % i for i in data]print( .join(lin))# 测试字节列表这也是网络传输收到的原始类型arr [0x4b, 0x43, 0x09, 0xa1, 0x01, 0x02, 0xab, 0x4a, 0x43]print_bytes_hex(arr)控制台输出4b 43 09 a1 01 02 ab 4a 43打印字符串类型的# 字符串或字符列表以16进制格式打印数据def print_string_hex(data):lin [%02x % ord(i) for i in data]print( .join(lin))# 测试字符串类型arr workprint_string_hex(arr)控制台输出57 6f 72 6b如果我们是开发物联网的项目涉及到信令需要与硬件开发人员交流的时候硬件那边基本都是以16进制描述的所以在服务端输出格式统一的数据流格式方便大家交流。上面的实现也可以用循环打印(在打印的时候格式化和加空格)实现但是写起来略显臃肿但是不用生成新的列表对瞬间内存占用有利(抱歉写硬件代码留下的习惯总是会想到内存占用因为单片机的资源实在有限)大家可以根据这个自己改进。希望与广大网友互动点此进行留言吧