2021/10/22-python处理hex()数据格式

博客介绍了如何将字节列表和字符串转换为16进制格式,通过定义`print_bytes_hex`和`print_string_hex`函数,实现了去除0x和逗号的16进制打印。内容涉及到Python的格式化输出、join()函数以及列表解析,提供了简洁的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《2021年10月22日》 【连续第22天总结】

问题

把arr = [0x4B, 0x43, 0x09, 0xA1, 0x01, 0x02, 0xAB, 0x4A, 0x43]转换成
4B4309A10102AB4A43数据格式(去掉0x和,)

解决思路:
可以通过格式化输出将字节值变成16进制字符后,再用join()函数输出,就可以实现我们要的效果了,想打印字符串的ASCii值也可以,只不过先用ord()函数转一下,下面是我封装的两个函数,分别对应字节类型和字符串类型的输出,调试通过,仅供参考。

join()函数说明:
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
用法:str.join(sequence)
示例:


#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
str = "-";
seq = ("a", "b", "c"); # 字符串序列
print str.join( seq );

以上实例输出结果如下:

a-b-c

解决方案

  • 打印字节类型的:
# 字节列表以16进制格式打印数据
def print_bytes_hex(data):
    lin = ['%02X' % i for i in data]	# [ ]内是列表解析语法 ,'%02X'%是格式化语法。
    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
'''

列表解析语法说明:

简单来说,列表解析(list comprehension)提供了一种优雅的生成列表的方法,能用一行代码代替十几行代码,而且不损失任何可读性。而且,性能还快很多很多

简单给个例子,如果我们需要0~100所有偶数组成的列表,正常的代码应该是这样的:
a=[]
for i in range(101):
    if i%2==0:
        a.append(i)
---------------------------------------------分界线-------------------------------------------------------------------
用列表解析来做就是这样的:
a=[x for x in range(101) if x%2==0]

简单的一行代码代替了4行代码

从上面的例子来看列表解析的语法其实不难,可以分成三个部分来看

    x:我们需要的列表里面的结果(1st part)
    for x in range(101):x来源——0~100的数字(2nd part)
    if x%2==0:x成立的条件,如果不成立就不放在列表里了(3rd part)
  • 打印字符串类型的:
# 字符串或字符列表以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
'''

python中bytes类型

对于bytes,我们只要知道在Python3中某些场合下强制使用,以及它和字符串类型之间的互相转换,其它的基本照抄字符串。

简单的省事模式:

string = b’xxxxxx’.decode() 直接以默认的utf-8编码解码bytes成string

b = string.encode() 直接以默认的utf-8编码string为bytes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值