2016-05-17 27 views
0

我新的结构模块和我试图做这样的事情:从我的服务器开箱字节为int

​​

获取值,然后解压缩,整数,我receving值但它不会把它给我这个错误:

struct.error: unpack requires a bytes object of length 4 

编辑: 好了,为的Martijn Pieters的告诉我这是什么存储在value whne异常被抛出,但我的代码另一部分

value = myClient.mySocket.recv(4) 
struct.unpack("I",value) 
if value == 2: 
    #do smth 

而且我在value收到b'\x02\x00\x00\x00'调试器看到,但解包并没有将其更改为int所以if语句不执行,而在另一个循环迭代服务器发送什么和有例外。如何将这个字节值解压为整数?

EDIT2:好的,我解决了它

value = myClient.mySocket.recv(4) 
value = struct.unpack("I",value) 
if value[0] == 2: 
    #do smth 
+0

那么,什么类型的对象是价值呢?你真的收到4个字节吗? –

+0

在调试器中搜索它时,它会说:'b'\ x01 \ x00 \ x00 \ x00'' – Cardano

+3

这是一个长度为4的字节对象,不会抛出该异常。当抛出异常*时,那么'value'中包含了什么?请注意,'recv()'调用**可能会返回更少的字节,如果这是可用的。 –

回答

2

unpack()返回结果,所以x = unpack(...),然后if x[0] ==...