如何将整数转换为字符串中的单字节?

6 投票
2 回答
10496 浏览
提问于 2025-04-17 16:24

我现在正在用Python实现PKCS#7填充,需要对文件的块进行填充,使其长度能够被16整除。有人建议我使用以下方法来添加这些字节:

input_chunk += '\x00'*(-len(input_chunk)%16)

我需要做的事情如下:

input_chunk_remainder = len(input_chunk) % 16
input_chunk += input_chunk_remainder * input_chunk_remainder

显然,上面的第二行是错的;我需要把第一个input_chunk_remainder转换成一个单字节字符串。我该如何在Python中做到这一点呢?

2 个回答

2

在Python3中,bytes这个内置功能可以接受一串整数。所以如果只用一个整数的话:

>>> bytes([5])
b'\x05'

当然,这里说的是字节,不是字符串。不过在Python3的世界里,提问者可能会用字节来做他描述的那个应用程序。

8

在Python 3中,你可以用bytes()类型来创建指定数值的字节。你可以传入一个整数列表,这些整数的范围是0到255:

>>> bytes([5])
b'\x05'
bytes([5] * 5)
b'\x05\x05\x05\x05\x05'

另外一种方法是使用array.array(),你需要传入合适数量的整数:

>>> import array
>>> array.array('B', 5*[5]).tobytes()
b'\x05\x05\x05\x05\x05'

或者可以使用struct.pack()函数把你的整数打包成字节:

 >>> import struct
 >>> struct.pack('{}B'.format(5), *(5 * [5]))
 b'\x05\x05\x05\x05\x05'

可能还有更多的方法.. :-)

在Python 2(现在算是古老的版本)中,你可以用chr()函数来做到同样的事情:

>>> chr(5)
'\x05'
>>> chr(5) * 5
'\x05\x05\x05\x05\x05'

撰写回答