有没有方法填充到偶数位数?
我正在尝试创建一些需要传输的数据的十六进制表示(具体来说,是用ASN.1格式)。在某些情况下,我需要将数据转换成十六进制表示。因为数据是以字节序列的形式传输,所以如果长度是奇数,就必须在前面加一个0来填充。
举个例子:
>>> hex2(3)
'03'
>>> hex2(45)
'2d'
>>> hex2(678)
'02a6'
我的目标是找到一个简单优雅的方法来实现 hex2
。
目前我使用的是 hex
,先去掉前两个字符,然后如果字符串的长度是奇数,就在前面加一个 0
。不过,我希望能找到一个更好的解决方案,以备将来参考。我查过 str.format
,但没有找到可以填充到倍数的方法。
4 个回答
0
Python的 binascii
模块里的 b2a_hex
函数保证会返回一个长度为偶数的字符串。
接下来,我们需要把整数转换成字节串。在Python 3.2及以上版本中,这个功能是内置在整数类型里的:
from binascii import b2a_hex
def hex2(integer):
return b2a_hex(integer.to_bytes((integer.bit_length() + 7) // 8, 'big'))
7
老实说,我也不太清楚问题出在哪里。根据你描述的内容,简单的实现方式是这样的:
def hex2(v):
s = hex(v)[2:]
return s if len(s) % 2 == 0 else '0' + s
我不一定会称这个实现为“优雅”,但我肯定会说它是“简单”的。
8
这段内容来自StackOverflow,主要讨论的是一些编程相关的问题和解决方案。它可能涉及到代码的写法、调试技巧或者是如何使用某些工具和库。对于刚入门的编程小白来说,理解这些内容可能会有点挑战,但只要慢慢来,多实践,就能掌握这些知识。
如果你在学习编程,遇到不懂的地方,可以尝试查找相关的资料,或者向更有经验的人请教。记住,编程是一个不断学习和实践的过程,不要急于求成。
def hex2(n):
x = '%x' % (n,)
return ('0' * (len(x) % 2)) + x