Python输出16进制不带0x补零,整数转16进制,字符串转16进
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 4316进制字符串转16进制数组
'''
打印字符串类型的:
# 字符串或字符列表以16进制格式打印数据
def print_string_hex(data):
lin = ['%02X' % ord(i) for i in data]
print(" ".join(lin))
# 测试字符串类型
arr = 'Work'
print_string_hex(arr)
'''
控制台输出:
57 6F 72 6B
'''
  如果我们是开发物联⽹的项⽬,涉及到信令需要与硬件开发⼈员交流的时候,硬件那边基本都是以16进制描述的,所以在服务端输出格式统⼀的数据流格式,⽅便⼤家交流。
  上⾯的实现也可以⽤循环打印(在打印的时候格式化和加空格)实现,但是写起来略显臃肿,但是不⽤⽣成新的列表,对瞬间内存占⽤有利(抱歉,写硬件代码留下的习惯,总是会想到内存占⽤,因为单⽚机的资源实在有限)⼤家可以根据这个⾃⼰改进。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。