有没有办法填充偶数个数字?

时间:2010-12-06 16:34:19

标签: python string padding

我正在尝试创建一些需要传输的数据的十六进制表示(具体来说,在ASN.1表示法中)。在某些时候,我需要将数据转换为十六进制表示。由于数据是作为字节序列传输的,如果长度为奇数,则必须用0填充十六进制表示。

示例:

>>> hex2(3)
'03'
>>> hex2(45)
'2d'
>>> hex2(678)
'02a6'

目标是为hex2找到一个简单,优雅的实现。

目前我正在使用hex,剥离前两个字符,如果长度为奇数,则用0填充字符串。但是,我想找到一个更好的解决方案,以备将来参考。我查看了str.format而没有发现任何填充到多个。

4 个答案:

答案 0 :(得分:7)

def hex2(n):
  x = '%x' % (n,)
  return ('0' * (len(x) % 2)) + x

答案 1 :(得分:7)

说实话,我不确定问题是什么。直接实现您描述的内容如下:

def hex2(v):
  s = hex(v)[2:]
  return s if len(s) % 2 == 0 else '0' + s

我不一定称之为“优雅”,但我当然称之为“简单”。

答案 2 :(得分:0)

Python的binascii模块b2a_hex保证返回偶数长度的字符串。

然后,技巧是将整数转换为字节串。 Python3.2及更高版本内置于int:

from binascii import b2a_hex

def hex2(integer):
    return b2a_hex(integer.to_bytes((integer.bit_length() + 7) // 8, 'big'))

答案 3 :(得分:-1)

可能希望查看结构模块,该模块专为面向字节的i / o而设计。

import struct
>>> struct.pack('>i',678)
'\x00\x00\x02\xa6'
#Use h instead of i for shorts
>>> struct.pack('>h',1043)
'\x04\x13'