通过这种方式分配它:crc = "CB3D9FD1"
你是说让 var crc 成为一个 8 字节的字符串。正如@Bashwork 所说,您需要将其从十六进制字符串转换为数字或保持数字。像这样用0x分配它以获得一个数值:crc=0xCB3D9FD1
。
pack("L",x) 意味着我给你 x 这是(必须是)一个整数,我希望你把它打包成一个unsigned long。
你得到“struct.error: cannot convert argument to integer”,因为你传递了 pack("L",...) 一个字符串 "CB3D9FD1"。
RTFM “L”和“I”以及其他参数的含义:https ://docs.python.org/2/library/struct.html
将 CRC 打包为长整数工作:你会得到 0 填充到 64 位(在我的 PC 上。YMMV)
>>> from struct import pack
>>> crc=0xcb3d9fd1
>>> repr(crc)
'3409813457'
>>> pack("L", crc)
'\xd1\x9f=\xcb\x00\x00\x00\x00'
>>> print crc
3409813457
也许你想使用 pack("I",...): 来获得 32bits
>>> pack("I",crc)
'\xd1\x9f=\xcb'
如果尝试使用 pack("L",...) 打包 CRC 字符串,则失败:
>>> crc = "CB3D9FD1"
>>> repr(crc)
"'CB3D9FD1'"
>>> pack("L", crc)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: cannot convert argument to integer