1

当我尝试替换部分数据时,它给了我一个错误。
我想在发回之前替换部分数据的十六进制值。
我应该如何处理这个?

data, addr = s.recvfrom(32768)
if knownClient is None:
    knownClient = addr
if addr == knownClient:
    s.sendto(data, knownServer)
    print "Sent     : " + ":".join("{0:02X}".format(ord(c)) for c in data)
else:
    data[10] = 0xFF #error_here
    data[11] = 0x0A #error_here
    s.sendto(data, knownClient)
4

2 回答 2

3

你不能修改字符串——它们是不可变的。如果你想改变字符串,你有几个选择。第一个选项是创建一个新字符串。

data = data[:10]+chr(0xFF) + chr(0x0A) + data[12:]

如果您将经常修改数据,您可能希望使用列表或数组来代替

datalist = list(data)
datalist[10] = chr(0xFF)
datalist[11] = chr(0x0A)

然后当你想在修改后返回一个字符串时:

data = ''.join(datalist)
于 2013-04-21T16:20:45.027 回答
0

您需要构建一个新字符串:

data = data[:10] + chr(0xFF) + data[11:]
于 2013-04-21T16:14:06.060 回答