Python 3 struct.pack 未正确格式化十六进制字符串
Python 3 struct.pack not formatting hex string correctly
#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' )”。知道这里会发生什么吗?它告诉我 post 更多符合条件的信息 post 我的问题。所以我只是随机输入一些东西,直到它让我 post 我的问题。
改变你的期望:)
>>> b'\x75' == b'u'
True
>>> b'\x59' == b'Y'
True
两个字符串是等价的。 Python 在字节串中显示 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]
#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' )”。知道这里会发生什么吗?它告诉我 post 更多符合条件的信息 post 我的问题。所以我只是随机输入一些东西,直到它让我 post 我的问题。
改变你的期望:)
>>> b'\x75' == b'u'
True
>>> b'\x59' == b'Y'
True
两个字符串是等价的。 Python 在字节串中显示 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]