Python3在字节字符串中添加一个额外的字节

时间:2015-01-21 21:33:05

标签: python-3.x

file_1 = (r'res\test.png')

with open(file_1, 'rb') as file_1_:
file_1_read = file_1_.read()    
file_1_hex = binascii.hexlify(file_1_read)
print ('Hexlifying test.png..')

pack = ("test.packet") 

file_1_size_bytes = len(file_1_read)

print (("test.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("0000020000000D007200650073002F00000074006500730074002E0070006E006700000000"))
print ("Header part 1 added.")

因此,将“0000020000000D007200650073002F00000074006500730074002E0070006E006700000000(00)”写入未完全包装。

最后有一个额外的“00”字节。这是我想要做的一切搞乱,因为数据包长度在加载时被引回,我在每个字符串的末尾有大约13个额外的“00”字节我写入文件。所以反过来我的文件比应该的长13个字节。更不用说标头字节长度没有被正确读取,因为填充是1个字节。

1 个答案:

答案 0 :(得分:0)

你似乎在说binascii.unhexlify并没有真正压缩输入字符串。我很难相信。这是一个最小的完整可运行示例和Win 7上的3.4.2输出。

import binascii
import io

b = binascii.unhexlify(
    "000000030000000100000000000000040041004E0049004D00000000000000")
print(b)  # bytes
bf = io.BytesIO()
bf.write(b)
print(bf.getvalue())

>>> 
b'\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00A\x00N\x00I\x00M\x00\x00\x00\x00\x00\x00\x00'
b'\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00A\x00N\x00I\x00M\x00\x00\x00\x00\x00\x00\x00'

Unhexlify已将每对十六进制字符转换为预期的字节。