我正在尝试在python中创建一个RDT2.2客户端 - 服务器模型,我发送的数据包是一个数组,这样当服务器将其写回时,从数据文件读取的二进制值不会搞砸。这是计算数据包校验和的函数。我收到了这个错误:
ValueError:基数为16的int()的无效文字:'00 -1'
def calcChecksum(packet, size):
checksum = 0
index = 0
sizeworked = size
while (size > 1):
checksum += int((str("%02x" % (packet[index],)) +
str("%02x" % (packet[index+1],))), 16)
sizeworked -= 2
index += 2
if size:
checksum += packet[index]
checksum = (checksum >> 16) + (checksum & 0xFFFF)
checksum += (checksum >> 16)
return (~checksum) & 0xFFFF
校验和函数由此make包函数调用。
def makePacket(data, datasize, num):
packet = array('b')
if (data == 0):
packet.append(0)
else:
packet.fromfile(data, datasize)
print len(packet)
packet.append(num)
print len(packet)
checksum = calcChecksum(packet, len(packet)) #here
packet.append(checksum)
print len(packet)
return packet
我得到的错误是因为我使用的是数组而不是列表?我修改了一些基于用户列表的代码,而不是从二进制数据文件中读取的数据。