Python将十六进制二进制转换为字符串

8
我正在使用python3.5,并希望将16进制字节(如b'\x00',b'\x01'等)的输出写入到Python字符串中,其中\x00应转换为0,\x01应转换为1。我有一种感觉可以轻松地以Pythonic的方式完成,但是半个小时的谷歌搜索仍然让我认为最简单的方法是手动创建一个包含映射的字典(我只需要从0到7)。请注意保留HTML标记。
Input    Intended output
b'\x00'  0 or '0'
b'\x01'  1 or '1'

etc.


1
你的输入是什么,预期输出是什么? - Daniel
2
b 表示 bytes,而不是二进制。\x00 不是字符串 0,而是字符编码为 0,无法显示,因此 Python 显示其代码。 - furas
你期望使用 b"\x0F" 得到的结果是 "F" 还是 "15" - furas
4个回答

6
一个字节串自动就是一组数字列表。
input_bytes = b"\x00\x01"
output_numbers = list(input_bytes)

6
你是否只是在寻找像这样的东西?
for x in range(0,8):
    (x).to_bytes(1, byteorder='big')

输出结果为:

b'\x00'
b'\x01'
b'\x02'
b'\x03'
b'\x04'
b'\x05'
b'\x06'
b'\x07'

或者相反:
byteslist = [b'\x00',
b'\x01',
b'\x02',
b'\x03',
b'\x04',
b'\x05',
b'\x06',
b'\x07']

for x in byteslist:
    int.from_bytes(x,byteorder='big')

输出:

0
1
2
3
4
5
6
7

5

不确定您是否需要这个结果,但可以尝试一下

output = [str(ord(x)) for x in output]

不错,但是会有\x0F和类似的问题 ;) - furas
1
嗯...他说:“实际上我只需要从0到7”的内容 :) - Jaroszewski Piotr

3

如果你需要将b"\x0F"转换为F,那么请使用以下代码:

print( hex(ord(b'\x0F'))[2:] )

或者使用format()函数。
print( format(ord(b'\x0F'), 'X') )    # '02X' gives string '0F'
print( '{:X}'.format(ord(b'\x0F')) )  # '{:02X}' gives string '0F'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接