时间:2018-08-22 20:08:51

标签: python python-3.x hex

我正在尝试以其他方式打印十六进制...

首先,我要进行转换(字节串是变量的名称):

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'

4 个答案:

答案 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中,bytesstr,因此您必须使用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'