如何将有符号的32位int转换为无符号的32位int?

问题描述:

这就是我目前所拥有的。有没有更好的方法来做到这一点?如何将有符号的32位int转换为无符号的32位int?

import struct 
def int32_to_uint32(i): 
    return struct.unpack_from("I", struct.pack("i", i))[0] 

不知道这是否是 “更好” 或不...例如使用numpy的

import ctypes 

def int32_to_uint32(i): 
    return ctypes.c_uint32(i).value 
+0

那返回一个Python整数类型,虽然这在这种情况下可能不是一个有意义的结果,因为它实际上不再是uint32了。我想这取决于他如何使用它。 – Cairnarvon 2013-05-09 01:50:17

+0

@Cairnarvon:对于'1'和'-1',OP的版本分别返回一个'int'和一个'long'。我的版本为两者返回一个“长”。 – martineau 2013-05-09 03:47:41

+0

不错!我可能会更喜欢这个。这是与'struct'的跨平台吗? – Claudiu 2013-05-09 14:53:27

import numpy 
result = numpy.uint32(numpy.int32(myval)) 

甚至阵列上,

arr = numpy.array(range(10)) 
result = numpy.uint32(numpy.int32(arr))