2016-08-03 76 views
2

有了C的背景知識,我想將一個整數序列化爲3個字節。我搜查了很多,發現我應該使用結構打包。我想是這樣的:在Python中打包一個整數到3個字節

number = 1195855 
buffer = struct.pack("format_string", number) 

現在我希望緩衝要像['\x12' '\x3F' '\x4F']。是否也可以設置字節序?

回答

3

這是可能的,在您的格式字符串中使用任何><

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 

將是一種方式。

+1

'buffer = struct.pack(「> L」,number)[1:]'會做掉掉第一個字節的技巧。 – smarx

+0

'assert [hex(b)for struct.pack('> L',1195855)[1:]] ['0x12','0x3f','0x4f']' – smarx

+0

AttributeError:'str'object沒有屬性'十六進制'。這個錯誤是什麼意思? – saeed

相關問題