我有
check_paket = 0
check_paket = fragIndex
check_header = struct.pack('!I', check_paket)
sock.sendto(check_header, (host, port))
当我收到并打开包装
check_fragIndex = 0
data, addr = self.sock.recvfrom(65489)
check_header = data[:4]
(check_fragIndex) = struct.unpack('!I', check_header)
print('SENDER: check_fragIndex:' +str(check_fragIndex))
发送时 fragIndex
设置为1
,因此打印此
SENDER: check_fragIndex:(1,)
而不是SENDER: check_fragIndex: 1
我想创建一个字符串,但为什么呢?我需要fragIndex
作为4字节整数...
答案 0 :(得分:0)
struct.unpack()
始终返回一个元组。来自documentation:
结果是一个元组,即使它只包含一个项目。
您出现以尝试使用赋值来提取一个值,但您只使用了括号:
(check_fragIndex) = struct.unpack('!I', check_header)
(check_fragIndex)
只是一个带括号的名字,而不是一个元组,所以没有提取; check_fragIndex
绑定到struct.unpack()
返回的整个元组。您需要逗号才能获得该效果:
(check_fragIndex,) = struct.unpack('!I', check_header)
# ^ the comma is crucial here
您可以完全省略括号:
check_fragIndex, = struct.unpack('!I', check_header)
或只使用索引来提取一个结果:
check_fragIndex = struct.unpack('!I', check_header)[0]