2012-04-11 7 views
2

Eine 64-Bit-Nummer wird von msgpack als signiert entpackt; Wie kann ich es als unsigned uminterpretieren?interpretiert in Python als vorzeichenlos solange neuinterpretiert

+0

@Marcin wenn num <0: num = struct.unpack (" Will

+0

Beachten Sie, dass Python nicht (nativ) haben Ganzzahlige Ganzzahlen ohne Vorzeichen, also müssen Sie etwas schlaues tun, wie z. B. die obere und die untere Hälfte des Ganzzahlbereichs extrahieren, bevor Sie sie zu einem "dezimalen" oder "langen" Objekt hinzufügen. – Marcin

Antwort

3

Wie wäre es

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

oder, wenn Sie etwas twiddling bevorzugen,

x &= 2 ** 64 - 1 
2

Sie so etwas wie das zu bedeuten?

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

[Dies funktioniert nicht auf einer 32-Bit-Box.] (Http://ideone.com/OySSt) –

Verwandte Themen