有没有方法填充到偶数位数?

9 投票
4 回答
3622 浏览
提问于 2025-04-16 08:07

我正在尝试创建一些需要传输的数据的十六进制表示(具体来说,是用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

撰写回答