Назначая его следующим образом: crc = "CB3D9FD1"
вы говорите, что var var crc является 8-байтовой строкой.Как говорит @Bashwork, вам нужно преобразовать его из шестнадцатеричной строки в числовую или оставить ее числовой.Присвойте ему 0x , чтобы получить числовое значение: crc=0xCB3D9FD1
.
pack ("L", x) означает, что я даю вам x, который является (должен быть) integer и я хочу, чтобы вы упаковали его как unsigned long .
Вы получаете "struct.error: невозможно преобразовать аргумент в целое число" , поскольку вы передаетеpack ("L", ...) строка "CB3D9FD1".
RTFM, что означают "L" и "I" и другие аргументы: https://docs.python.org/2/library/struct.html
Упакуйте CRC как можно дольшеработает целое число: и вы получаете 0 с дополнением до 64 бит (на моем ПК. YMMV) * 1019 *
>>> from struct import pack
>>> crc=0xcb3d9fd1
>>> repr(crc)
'3409813457'
>>> pack("L", crc)
'\xd1\x9f=\xcb\x00\x00\x00\x00'
>>> print crc
3409813457
Может быть, вы хотите использовать pack ("I", ...): для получения 32 бит
>>> pack("I",crc)
'\xd1\x9f=\xcb'
Ошибка при попытке упаковать строку CRC с пакетом ("L", ...):
>>> 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