在 python 中打包字符串的正确方法
Proper way to pack a string in python
将 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 类型:来自 struct
页面的 s
、b
和 c
。
对于大小超过一个字节的值,只有字节顺序是一回事,因此您无需在这里担心它。
我能想到的将 5 字节的字节串填充到 8 字节的最简洁的方法是
b'David'.ljust(8, b'[=10=]')
将 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 类型:来自 struct
页面的 s
、b
和 c
。
对于大小超过一个字节的值,只有字节顺序是一回事,因此您无需在这里担心它。
我能想到的将 5 字节的字节串填充到 8 字节的最简洁的方法是
b'David'.ljust(8, b'[=10=]')