我试图在 Python 中模仿 C 程序的某些部分的行为。他们都在读取一个二进制文件,其中每条记录都是长度->数据。C 程序将从文件中提取长度字节,无论是正数还是负数,ntohl() 都会返回正确的长度。然而,在 Python 中,即使长度记录是相同的值,当它是负数时,我会得到一个溢出错误:
长度:419495936
ntohl: 281
长度:-2147418112
溢出错误:无法将负数转换为无符号长
与 C 相比:
长度:419495936
ntohl: 281
长度:-2147418112
ntohl: 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)