このように割り当てることによりcrc = "CB3D9FD1"
、varcrcを8バイトの文字列にするということです。@Bashworkが言うように、16進文字列から数値に変換するか、数値を維持する必要があります。数値を取得するには、次のように0xを割り当てますcrc=0xCB3D9FD1
。
pack( "L"、x)は、整数である(必須の)xを指定していることを意味し、 unsignedlongとしてパックしてほしい。pack( "L"、...)に文字列 "CB3D9FD1"を渡したため、"struct.error:引数を整数に変換できません"
が表示されます。
RTFM「L」と「I」およびその他の引数の意味:https ://docs.python.org/2/library/struct.html
長整数が機能するようにCRCをパックします。64ビットに0がパディングされます(私の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"、...)を使いたいでしょう:32ビットを取得するために
>>> 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