为什么此函数中的int到十六进制转换无效?

时间:2017-03-05 23:37:21

标签: python python-2.7

我正在尝试在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

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

0 个答案:

没有答案