使用带负数的struct.pack

时间:2014-11-30 01:43:11

标签: python unsigned

我正在尝试使用struct.pack将整数转换为网络顺序2字节字符串。

struct.pack("!H", -9890)

导致:

error: integer out of range for 'H' format code

我的意思是struct.pack("!H", -9890 & 0xff),即取这个数字的最后两个字节。有没有办法让struct以这种方式表现,而不必每次都掩盖输入?

1 个答案:

答案 0 :(得分:2)

你无法让struct为你掩饰;你需要手动提供适合的整数。如果使用0xff屏蔽数字适用于您的应用程序,那么您就必须这样做。

Python不会在这里猜测,Python整数是无界的,并且提供struct插槽范围之外的整数不是一个可以猜测的工作。毕竟,如果产生超出范围的值,则可能是应用程序错误。如果范围之外的值应该 以适合,那么由你决定如何做到这一点;掩蔽是一种方法,将值限制为边界(0或255)是另一种方式。

引用Zen of Python中的两个适用行:

  

明确比隐含更好。

     

[...]

     

面对模棱两可,拒绝猜测的诱惑。