To jest to, co mam, obecnie. Czy jest jakiś lepszy sposób na zrobienie tego?Jak przekonwertować podpisany 32-bitowy int na unsigned 32-bitowy int?
import struct
def int32_to_uint32(i):
return struct.unpack_from("I", struct.pack("i", i))[0]
To jest to, co mam, obecnie. Czy jest jakiś lepszy sposób na zrobienie tego?Jak przekonwertować podpisany 32-bitowy int na unsigned 32-bitowy int?
import struct
def int32_to_uint32(i):
return struct.unpack_from("I", struct.pack("i", i))[0]
Nie wiem, czy to jest "ładniejszy", czy nie ...
import ctypes
def int32_to_uint32(i):
return ctypes.c_uint32(i).value
użyciu numpy na przykład:
import numpy
result = numpy.uint32(numpy.int32(myval))
lub nawet na tablicach,
arr = numpy.array(range(10))
result = numpy.uint32(numpy.int32(arr))
Że zwraca typ liczby Pythona, co prawdopodobnie nie jest znaczącym wynikiem w tym kontekście, ponieważ w rzeczywistości nie jest to już wersja uint32. Przypuszczam, że to zależy od tego, jak go używa. – Cairnarvon
@Cairnarvon: Dla '1' i' -1', wersja OP zwraca odpowiednio 'int' i' long'. Moja wersja zwraca 'long' dla obu. – martineau
Nice! Prawdopodobnie wolałbym to. Czy jest to tak wieloplatformowe jak "struct"? – Claudiu