如何将整数转换为字符串中的单字节?
我现在正在用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'