Python で C プログラムの一部の動作を模倣しようとしています。どちらも、各レコードが長さ->データであるバイナリファイルを読み取っています。C プログラムはファイルから長さバイトを取得し、それが正か負かに関係なく、ntohl() は正しい長さを返します。ただし、Python では、長さレコードが同じ値であっても、それが負の場合、OverflowError が発生します。
長さ: 419495936
トール: 281
長さ: -2147418112
OverflowError: 負の数を unsigned long に変換できません
Cと比較して:
長さ: 419495936
トール: 281
長さ: -2147418112
トール: 384
ここで何が間違っていますか?Python で C と同じ結果を生成するにはどうすればよいですか?
コードで編集
Cコードは次のとおりです。
while (fread(&rec_len, sizeof(unsigned int), 1, fp1) != 0) {
printf("length: %d\n", rec_len);
rec_len = ntohl(rec_len);
printf("ntohl: %d\n", rec_len);
そして、ここにPythonがあります:
with open(file, "rb") as f:
pSize = struct.unpack('<i', f.read(4))[0]
print "length: " + str(pSize)
packetSize = socket.ntohl(pSize)
print "ntohl: " + str(packetSize)
while packetSize > 0:
packet = f.read(packetSize)
pSize = struct.unpack('<i', f.read(4))[0]
print "length: " + str(pSize)
packetSize = socket.ntohl(pSize)
print "ntohl: " + str(packetSize)