2
有了C的背景知識,我想將一個整數序列化爲3個字節。我搜查了很多,發現我應該使用結構打包。我想是這樣的:在Python中打包一個整數到3個字節
number = 1195855
buffer = struct.pack("format_string", number)
現在我希望緩衝要像['\x12' '\x3F' '\x4F']
。是否也可以設置字節序?
有了C的背景知識,我想將一個整數序列化爲3個字節。我搜查了很多,發現我應該使用結構打包。我想是這樣的:在Python中打包一個整數到3個字節
number = 1195855
buffer = struct.pack("format_string", number)
現在我希望緩衝要像['\x12' '\x3F' '\x4F']
。是否也可以設置字節序?
這是可能的,在您的格式字符串中使用任何>
或<
:
import struct
number = 1195855
def print_buffer(buffer):
print(''.join(["%02x" % ord(b) for b in buffer])) # Python 2
#print(buffer.hex()) # Python 3
# Little Endian
buffer = struct.pack("<L", number)
print_buffer(buffer) # 4f3f1200
# Big Endian
buffer = struct.pack(">L", number)
print_buffer(buffer) # 00123f4f
注意,但是,你將不得不找出你想如何擺脫緩衝區中的空字節,因爲L
會給你4個字節,你只需要3
喜歡的東西:
buffer = struct.pack("<L", number)
print_buffer(buffer[:3]) # 4f3f12
# Big Endian
buffer = struct.pack(">L", number)
print_buffer(buffer[-3:]) # 123f4f
將是一種方式。
'buffer = struct.pack(「> L」,number)[1:]'會做掉掉第一個字節的技巧。 – smarx
'assert [hex(b)for struct.pack('> L',1195855)[1:]] ['0x12','0x3f','0x4f']' – smarx
AttributeError:'str'object沒有屬性'十六進制'。這個錯誤是什麼意思? – saeed