我正在尝试以其他方式打印十六进制...
首先,我要进行转换(字节串是变量的名称):
b'\xff\x00\xff\xff\xff'
十六进制,
print(bytestring.hex())
输出:
ff00ffffff
但是我已经尝试了一段时间以使其输出:
ff 00 ff ff ff
但没有运气。
有什么建议吗? 干杯!
更新:
stringdata = f.read(5)
print(stringdata)
#b'\xff\x00\xff\xff\xff'
readHex = " ".join(["{:02x}".format(x) for x in stringdata.hex()])
# ValueError: Unknown format code 'x' for object of type 'str'
答案 0 :(得分:5)
只需将字节数组转换为十六进制字符串,然后将结果与空格连接起来即可:
>>> d=b'\xff\x00\xff\xff\xff'
>>> " ".join(["{:02x}".format(x) for x in d])
'ff 00 ff ff ff'
请注意," ".join("{:02x}".format(x) for x in d)
也可以使用,但是强制列表创建的速度更快,如下所示:Joining strings. Generator or list comprehension?
在python 2中,bytes
是str
,因此您必须使用ord
来获取字符代码
>>> " ".join(["{:02x}".format(ord(x)) for x in d])
答案 1 :(得分:3)
在Python 3.8+中,hex
函数具有可选的参数分隔符。
>>> print(b'\xff\x00\xff\xff\xff'.hex(' '))
'ff 00 ff ff ff'
您可以将十六进制字符串与所需的任何字符分开。
>>> print(b'\xff\x00\xff\xff\xff'.hex(':'))
'ff:00:ff:ff:ff'
答案 2 :(得分:1)
好像社区不同意这是骗子,所以我将发布iterate over it in chunks作为答案。
您可以转换为字符串:
bytestring = str(b'\xff\x00\xff\xff\xff').encode('hex')
print(bytestring)
#ff00ffffff
然后将scriptlet设为2,并用空格将这些块连接起来:
print(" ".join([bytestring[i:i+2] for i in range(0, len(bytestring), 2)]))
#'ff 00 ff ff ff'
答案 3 :(得分:0)
您可以遍历字节字符串,并在python中获得一系列字节。这些字节用整数表示。然后,将它们转换回十六进制字符串,并将它们全部连接在一起,并在每个十六进制字符串之间留一个空格。
>>> a = b'\xff\x00\xff\xff'
>>> print( ' '.join( '%02x' % x for x in a ) )
'ff 00 ff ff'
或者在python3中使用format
:
>>> a = b'\xff\x00\xff\xff'
>>> print( ' '.join( '{:02x}'.format(x) for x in a ) )
'ff 00 ff ff'