2016-08-03 5 views
2

C의 배경 지식으로 정수를 3 바이트로 직렬화하려고합니다. 나는 많은 것을 검색했고 구조체 패킹을 사용해야한다는 것을 알았다.파이썬에서 정수를 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 바이트를 줄 것이므로 버퍼에서 빈 바이트를 제거하는 방법을 파악하십시오.

buffer = struct.pack("<L", number) 
print_buffer(buffer[:3])   # 4f3f12 

# Big Endian 
buffer = struct.pack(">L", number) 
print_buffer(buffer[-3:])   # 123f4f 

하나 개의 방법이 될 것입니다 : 당신은 단지 같은 3

뭔가를 원한다.

+1

'buffer = struct.pack ("L", number) [1 :]'첫 번째 바이트를 삭제하는 트릭을 수행합니다. – smarx

+0

'struct.pack ('>'L ', 1195855)의 b에 대해 [assert [hex (b) (b)] [= 1]'0x12 ','0x3f ','0x4f ']' – smarx

+0

AttributeError : 'str'객체 'hex'속성이 없습니다. 이 오류는 무엇을 말하고 있습니까? – saeed

관련 문제