2

将 5 字节 asci 字符串打包到 python 中的正确方法是什么,使其为 8 字节和小端序?例如,类似:

from struct import pack
pack('<ccccc3x', 'David')

或者:

pack('<ccccc3x', b'D', b'a', b'v', b'i', b'd')
# this works but seems unreadable to me

正确(或最简单)的方法是什么?理想情况下,类似:

>>> pack('<ccccc3x', *bytearray(b'David'))

但似乎我不能传递一个列表或做变量解包,我必须为每个字符做一个新的位置参数。


我能想到的最好的方法如下,但我希望有更好的方法来做到这一点:

# why won't it allow me to use `c`(har) and only `b`(yte) ?
>>> pack('<5b3x', *bytearray(b'David'))
b'David\x00\x00\x00' 

更新:似乎这可能是最好的方法:

>>> pack('<5s3x', b'David')
b'David\x00\x00\x00'

不确定所有不同的 'char'-ish 类型:s, b, 和c来自struct页面。

4

1 回答 1

2

仅字节序对于大小超过一个字节的值来说是一件事情,所以你不需要在这里担心它。

我能想到的将 5 字节字节串填充为 8 字节的最简洁方法是

b'David'.ljust(8, b'\0')
于 2020-09-17T05:40:14.223 回答