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
Antwort
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
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)
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
See [diese Frage] (http://stackoverflow.com/questions/7675222/in-javascript-how-is-integer-represented-in-storage-layout) –
Werfen Sie einen Blick http://stackoverflow.com/questions/2104884/how-does-python-manage-int-and-long –