2015-01-19 2 views
0
#res\file_1.png- file_1 

    file_1_size_bytes = len(file_1_read) 

    print (("file_1.png is"),(file_1_size_bytes),("bytes.")) 

    struct.pack('i', file_1_size_bytes) 
    file_1_size_bytes_hex = binascii.hexlify(struct.pack('>i', file_1_size_bytes)) 
    print (("Hexlifyed length - ("),(file_1_size_bytes_hex),(").")) 

    with open(pack, 'ab') as header_1_: 
    header_1_.write(binascii.unhexlify(file_1_size_bytes_hex)) 

    print (("("),(binascii.unhexlify(file_1_size_bytes_hex)),(")")) 

    with open(pack, 'ab') as header_head_1: 
    header_head_1.write(binascii.unhexlify("000000")) 
    print ("Header part 2 added.") 
    print ("file_1.png byte length added to header.") 

    print ("-------------------------------------------------------------------------------") 



    #res\file_2.png- file_2 

    file_2_size_bytes = len(file_2_read) 

    print (("file_2.png is"),(file_2_size_bytes),("bytes.")) 

    struct.pack('i', file_2_size_bytes) 
    file_2_size_bytes_hex = binascii.hexlify(struct.pack('>i', file_2_size_bytes)) 
    print (("Hexlifyed length - ("),(file_2_size_bytes_hex),(").")) 

    with open(pack, 'ab') as header_2_: 
    header_2_.write(binascii.unhexlify(file_2_size_bytes_hex)) 

    print (("("),(binascii.unhexlify(file_2_size_bytes_hex)),(")")) 

    with open(pack, 'ab') as header_head_2: 
    header_head_2.write(binascii.unhexlify("000000")) 
    print ("Header part 3 added.") 
    print ("file_2.png byte length added to header.") 

    print ("-------------------------------------------------------------------------------") 

file_1.png is 437962 bytes. 
Hexlifyed length - (b'0006aeca'). 
(b'\x00\x06\xae\xca') 
Header part 2 added. 
file_1.png byte length added to header. 
------------------------------------------------------------------------------- 
file_2.png is 95577 bytes. 
Hexlifyed length - (b'00017559'). 
(b'\x00\x01uY') 
Header part 3 added. 
file_2.png byte length added to header. 
------------------------------------------------------------------------------- 

어떤 이유인지 struct.pack은 file_2 형식을 올바르게 지정하지 않습니다. "(b '\ x00 \ x01 \ x75 \ x59')"를 인쇄해야합니다. 대신 "(b '\ x00 \ x01uY')"를 인쇄합니다. 여기에 무슨 일이 일어날 지 모릅니다. 그게 내 질문을 게시 할 수있는 자격이 더 많은 정보를 게시 말해. 그래서 그냥 내 질문을 게시 할 때까지 무작위로 물건을 입력하려고합니다.Python 3 struct.pack에서 16 진수 문자열을 올바르게 포맷하지 않았습니다.

답변

2
는 당신의 기대를 변경

:

>>> b'\x75' == b'u' 
True 
>>> b'\x59' == b'Y' 
True 

두 문자열이 동일합니다. 파이썬은 바이트 문자열로 ASCII 문자를 표시합니다 :

>>> b'\x00\x01\x75\x59' == b'\x00\x01uY' 
True 

이들은 단지 같은 바이트 문자열의 인쇄 가능한 표현입니다. 두 개체 모두 같은 바이트 값을 포함합니다.

>>> list(b'\x00\x01uY') 
[0, 1, 117, 89] 
>>> list(b'\x00\x01\x75\x59') 
[0, 1, 117, 89] 
+0

아, 미안합니다. –