Struct.pack只发送数组而不是单个int变量

时间:2016-11-05 13:15:18

标签: python struct

我有

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字节整数...

1 个答案:

答案 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]