我试图用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 packet函数调用
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
我得到的错误是因为我使用数组而不是列表吗?我修改了一些基于用户列表的代码,而不是从二进制数据文件读取的数据
目前没有回答
相关问题 更多 >
编程相关推荐