Das habe ich derzeit. Gibt es einen schöneren Weg dies zu tun?Wie konvertiert man vorzeichenbehafteten 32-Bit-Int in unsigned 32-Bit-Int?
import struct
def int32_to_uint32(i):
return struct.unpack_from("I", struct.pack("i", i))[0]
Das habe ich derzeit. Gibt es einen schöneren Weg dies zu tun?Wie konvertiert man vorzeichenbehafteten 32-Bit-Int in unsigned 32-Bit-Int?
import struct
def int32_to_uint32(i):
return struct.unpack_from("I", struct.pack("i", i))[0]
nicht sicher, ob es "schöner" ist oder nicht ...
import ctypes
def int32_to_uint32(i):
return ctypes.c_uint32(i).value
mit numpy zum Beispiel:
import numpy
result = numpy.uint32(numpy.int32(myval))
oder auch auf Arrays,
arr = numpy.array(range(10))
result = numpy.uint32(numpy.int32(arr))
That gibt einen Integer-Typ von Python zurück, was in diesem Zusammenhang wahrscheinlich kein sinnvolles Ergebnis ist, wie es nicht mehr ein uint32 ist. Ich nehme an, es hängt davon ab, wie er es benutzt. – Cairnarvon
@Cairnarvon: Für "1" und "-1" gibt die OP-Version ein "int" bzw. ein "long" zurück. Meine Version gibt ein 'long' für beide zurück. – martineau
Schön! Ich würde das wahrscheinlich bevorzugen. Ist das so plattformübergreifend wie 'struct'? – Claudiu