python 3:字符串为十六进制,十六进制为格式

时间:2012-08-20 04:51:03

标签: python-3.x hex

问题:我需要将字符串转换为十六进制,然后格式化十六进制输出。

tmp = b"test"
test = binascii.hexlify(tmp)
print(test) 

输出:b' 74657374'


我想将这个十六进制输出格式化为:74:65:73:74

我遇到了障碍,不知道从哪里开始。我确实想过将输出再次转换为字符串,然后尝试格式化它,但必须有一种更简单的方法。

任何帮助都将不胜感激,谢谢。

==========

操作系统:Windows 7

tmp = "test"
hex = str(binascii.hexlify(tmp), 'ascii')
print(hex)

formatted_hex = ':'.join(hex[i:i+2] for i in range(0, len(hex), 2))
print(formatted_hex

[错误] Traceback(最近一次调用最后一次):   文件" C:\ pkg \ scripts \ Hex \ hex.py",第24行,in     hex = str(binascii.hexlify(tmp),' ascii')  TypeError:' str'不支持缓冲区接口

此代码仅在使用tmp = b' test'我需要能够以时尚的方式使用tmp = importString,因为我从文件顺序向其传递了另一个值,以便我的代码段能够正常工作。有什么想法吗?

3 个答案:

答案 0 :(得分:8)

hex = str(binascii.hexlify(tmp), 'ascii')
formatted_hex = ':'.join(hex[i:i+2] for i in range(0, len(hex), 2))

这使用了对step的{​​{1}}参数,它指定不是给出范围内的每个整数,而是应该只给出每个第二个整数(对于range())。


step=2

答案 1 :(得分:1)

>>> from itertools import izip_longest, islice
>>> t = b"test".encode('hex')
>>> ':'.join(x[0]+x[1] for x in izip_longest(islice(t,0,None,2),islice(t,1,None,2)))
'74:65:73:74'

答案 2 :(得分:0)

自 Python 3.8 起,此功能在标准库中可用:binascii.hexlify 有一个新参数 sep

test = binascii.hexlify(tmp, b':')

如果您想要文本 (str) 字符串而不是 bytes 字符串:

test = binascii.hexlify(tmp, b':').decode('ascii')