2012-04-11 105 views
2

64位数由msgpack解开为有符号;我怎么能重新解释它作为无符号?在Python中重新解释带符号的无符号长度

+0

@Marcin如果num <0:NUM = struct.unpack( “ Will 2012-04-11 14:36:52

+0

注意,Python没有(本地)有无符号整数,所以你必须做一些稍微巧妙的事情,比如在把它们添加到一个'decimal'或'long'对象之前提取整数范围的上半部分和下半部分。 – Marcin 2012-04-11 14:40:29

回答

3

如何

if x < 0: 
    x += 2 ** 64 

,或者,如果你喜欢位操作,

x &= 2 ** 64 - 1 
2

你的意思是这样的吗?

>>> struct.unpack('L', struct.pack('l', -2235234523)) 
(18446744071474317093L,) 
+1

[这不适用于32位盒子。](http://ideone.com/OySSt) – 2012-04-11 14:57:13