2016-08-02 56 views
2

Wenn ich zwei Hex-Strings habe und eine zu einer 32-Bit-Ganzzahl ohne Vorzeichen und die andere zu einem 64-Bit konvertieren möchte Ganzzahl ohne Vorzeichen, welche Basis würde ich die int() Funktion bereitstellen?Uint32 vs Uint64: Welche Basen brauche ich für die 'int()' Funktion, um richtig zu funktionieren

+0

See [diese Frage] (http://stackoverflow.com/questions/7675222/in-javascript-how-is-integer-represented-in-storage-layout) –

+0

Werfen Sie einen Blick http://stackoverflow.com/questions/2104884/how-does-python-manage-int-and-long –

Antwort

-1

So habe ich vermasselt und Int() bestimmt nicht die Größe oder das Zeichen Ihrer Hex-Zeichenfolge.

Per Definition hex ist 16. Sie würde also mit der Hex-Basis von 16

int('A1S31231', 16) 

Das Problem zwischen 32 Bit und 64 Bit in der Zeichenfolge gesetzt wurde einfach die Größe der Zeichenfolge als setzt in Streit.

Aufgrund ihrer Größe,

2 Hex-Zeichen = 1 Byte

Wenn ich also ein 64-Bit int hätte, würde es 8 Byte oder ein 16-Zeichen-hex String sein. Wenn ich einen 32-Bit-Int hatte, wäre es 4 Bytes oder 8 Zeichen Hex-String.

Based off Duncan's answer: Um Ihr Ergebnis unsigniert zu machen. Sie müssten Ihr Ergebnis und & sie mit ihrer richtigen Maske nehmen.

Wenn Sie von Hex zu einem Uint32 gehen freuen Sie würden die oben genannten int tun() Umwandlung und dann

result & 0xffffffff 

Wenn Sie von hex gehen wollten Sie UInt64 würde die oben genannten int tun () Umwandlung und dann

result & 0xffffffffffffffff 
1

Nun, Python entscheidet normalerweise, wie viel Speicher man sich selbst zuweisen soll. Siehe das folgende Beispiel:

>>> type(int('0x7fffffff', 16)) 
<type 'int'> 
>>> type(int('0x80000000', 16)) 
<type 'long'> 

Basierend auf der Größe der Nummer weist Python die richtige Speichermenge zu.

ABER wenn Sie die Methode verwenden long() statt int(), immer 8 Bytes zugewiesen werden, egal, was die Zahl ist:

>>> type(long('0x7fffffff', 16)) 
<type 'long'> 
>>> type(long('0x80000000', 16)) 
<type 'long'> 

* Getestet für Python 2.7 (nicht getestet mit 3 .x)

+0

In Python 3 gibt es keinen Unterschied zwischen int und long. Jede Integer-Zahl kann beliebig groß sein (solange Sie genügend Speicher haben). – warownia1