我有这个:
>>> a1 = pack('>L', 18)
>>> a1
b'\x00\x00\x00\x12'
和
>>> a2 = [int(0x0), int(0x0), int(0x0), int(0x12)]
>>> a2
[0, 0, 0, 18]
为什么他们不相同?
>>> a1 == a2
False
答案 0 :(得分:1)
因为如果你想要平等,你必须在byte string
中转换第二个变量a2
,a1
是 list of ints
,并且a2
是 byte string
,因此除非您转换a2
,否则它们永远不会被标记:例如:
import struct
import array
a1 = struct.pack('>L', 18)
print(a1)
$b'\x00\x00\x00\x12'
a2 = [int(0x0), int(0x0), int(0x0), int(0x12)]
print(a2)
$[0, 0, 0, 18] #this is a list
print(a1 == a2)
$False
a3 = array.array('B',a2).tostring() #transform the list into byte
print(a3)
$b'\x00\x00\x00\x12'
print(a1 == a3)
$True
答案 1 :(得分:0)
pack('>L', 18)
返回一个字节对象,a2
是一个列表。
答案 2 :(得分:0)
列表和字节字符串不是等效类型,即使它们相似。要将列表转换为字节字符串,可以使用以下方法,具体取决于您是否使用Python 2或3。
Python 2:
>>> ''.join(chr(c) for c in a2)
'\x00\x00\x00\x12'
Python 3:
>>> bytes(a2)
b'\x00\x00\x00\x12'