簡體   English   中英

在python中打包字符串的正確方法

[英]Proper way to pack a string in python

將一個五字節的 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'

盡管不確定struct頁面中所有不同的“char”類型: sbc

Endianness 僅適用於大小超過一個字節的值,因此您無需在此處擔心。

我能想到的將 5 字節字節串填充為 8 字節的最簡潔方法是

b'David'.ljust(8, b'\0')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM