Python 3.5 - 将字节对象转换为 16 位十六进制字符串 (b'\x07\x89' -> '0x0789')
Python 3.5 - Convert bytes object to 16bit hex string (b'\x07\x89' -> '0x0789')
一些设备returns数据(十六进制字节)以
的形式
data = b'\x07\x89\x00\x00\x12\x34'
如何将其转换为以下形式?
['0x0789', '0x0000', '0x1234']
我已经尝试过 hexlify 的组合。我正在使用 Python 3.5.
从您的 bytes
对象中取出两个一组。将每组的第一个值乘以 16**2。添加这两个值。在结果上使用 hex
将其转换为字符串表示形式。
>>> [hex(data[i]*16**2 + data[i+1]) for i in range(0,len(data),2)]
['0x789', '0x0', '0x1234']
我假设您暂时不需要用无用的零填充字符串。
使用struct模块;它具有 unpack
功能,允许指定数据块大小(字节、2 字节、4 字节)和字节顺序。如果您拥有的是 big-endian 半字大小的数据块,那么正确的格式键是“>H”。
要一次解析所有数据,请在格式说明符中添加计数:例如,“>3H”代表您输入的数组。也可以动态写字段数
完整示例:
import struct
data = b'\x07\x89\x00\x00\x12\x34'
d = struct.unpack(">{}H".format(len(data) // 2), data) # extract fields
result = [hex(x) for x in d] # convert to strings
有两个步骤:
- 将输入字节串分块为 2 字节序列
- 将序列显示为十六进制文字。
你可以use array
module from stdlib:
import sys
from array import array
a = array('H', data)
if sys.byteorder != 'big':
a.byteswap() # use big-endian order
result = ['0x%04X' % i for i in a]
# -> ['0x0789', '0x0000', '0x1234']
效率高,especially if you need to read data from a file。
一些设备returns数据(十六进制字节)以
的形式data = b'\x07\x89\x00\x00\x12\x34'
如何将其转换为以下形式?
['0x0789', '0x0000', '0x1234']
我已经尝试过 hexlify 的组合。我正在使用 Python 3.5.
从您的 bytes
对象中取出两个一组。将每组的第一个值乘以 16**2。添加这两个值。在结果上使用 hex
将其转换为字符串表示形式。
>>> [hex(data[i]*16**2 + data[i+1]) for i in range(0,len(data),2)]
['0x789', '0x0', '0x1234']
我假设您暂时不需要用无用的零填充字符串。
使用struct模块;它具有 unpack
功能,允许指定数据块大小(字节、2 字节、4 字节)和字节顺序。如果您拥有的是 big-endian 半字大小的数据块,那么正确的格式键是“>H”。
要一次解析所有数据,请在格式说明符中添加计数:例如,“>3H”代表您输入的数组。也可以动态写字段数
完整示例:
import struct
data = b'\x07\x89\x00\x00\x12\x34'
d = struct.unpack(">{}H".format(len(data) // 2), data) # extract fields
result = [hex(x) for x in d] # convert to strings
有两个步骤:
- 将输入字节串分块为 2 字节序列
- 将序列显示为十六进制文字。
你可以use array
module from stdlib:
import sys
from array import array
a = array('H', data)
if sys.byteorder != 'big':
a.byteswap() # use big-endian order
result = ['0x%04X' % i for i in a]
# -> ['0x0789', '0x0000', '0x1234']
效率高,especially if you need to read data from a file。