为什么此函数中的int到hex转换无效?

2024-04-20 13:05:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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

我得到的错误是因为我使用数组而不是列表吗?我修改了一些基于用户列表的代码,而不是从二进制数据文件读取的数据


Tags: 函数服务器datasizeindexlenpacket数据文件