Назначив его так: crc = "CB3D9FD1"
, вы говорите make var crc и 8-байтовую строку. Поскольку @Bashwork говорит, что вам нужно преобразовать его из шестнадцатеричной строки в числовую или сохранить ее числовой. Назначьте его 0x следующим образом, чтобы получить числовое значение: crc=0xCB3D9FD1
.
пакет («L», х) означает, что я даю вам что х (должно быть) в целое, и я хочу, чтобы вы упаковать его как неподписанных долгое.
Вы получаете «struct.error: невозможно преобразовать аргумент в целое число», потому что вы передаете пакет («L», ...) строку «CB3D9FD1».
RTFM, что "L" и "I" и другие аргументы означают: https://docs.python.org/2/library/struct.html
Упакуйте CRC, как длинное целое работает, и вы получите 0s отступы к 64bits (на моем компьютере YMMV).
>>> from struct import pack
>>> crc=0xcb3d9fd1
>>> repr(crc)
'3409813457'
>>> pack("L", crc)
'\xd1\x9f=\xcb\x00\x00\x00\x00'
>>> print crc
3409813457
Может быть, вы хотите использовать пакет ("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
Вам нужно будет указать дополнительную информацию о том, что вы делаете. Код помогает. Наименьший код, демонстрирующий проблему, идеален. Не стесняйтесь создавать короткий демонстрационный скрипт, который терпит неудачу, и ** обновите ** свой вопрос с ним. Python ничего плохого не делает; ваш скрипт имеет небольшую ошибку. –
Почему вы идете по этому маршруту? Посмотрите на этот ответ для альтернативы: http: // stackoverflow.com/questions/1742866/compute-crc-of-file-in-python – Joe