2015-05-22 9 views
6

Ich versuche, mein Projekt Python2.7 und 3 kompatibel und Python 3 hat die integrierte Methode int.from_bytes. Gibt es das Äquivalent in Python 2.7 oder was wäre der beste Weg, um diesen Code 2.7 und 3 kompatibel zu machen?Python 2.7 Äquivalent der integrierten Methode int.from_bytes

>>> int.from_bytes(b"f483", byteorder="big") 
1714698291 
+0

Wenn Sie speziell nach einer versionsübergreifenden Lösung suchen, sollten Sie dies im Titel deutlich machen. –

Antwort

14

Sie es als eine Codierung behandeln kann (Python 2 spezifisch):

>>> int('f483'.encode('hex'), 16) 
1714698291 

Oder in Python 2 und Python 3:

>>> int(codecs.encode(b'f483', 'hex'), 16) 
1714698291 

Der Vorteil ist die Saite nicht begrenzt ist zu einer bestimmten Größenannahme. Der Nachteil ist, dass es nicht signiert ist.

+0

hah Ich mag diese Lösung ... viel ... ihre eine hätte ich nicht gedacht :) es hat den zusätzlichen Vorteil, nichts über die Eingabe wissen zu müssen –

+0

Deines ist besser, denn es sollte in Python 2 funktionieren und 3. Danke tho – dawg

+0

Wenn Sie Codecs.encode verwenden, sollten Sie auch –

5
struct.unpack(">i","f483")[0] 

vielleicht?

> bedeutet Big-Endian und i Mittel unterzeichneten 32-Bit-int

siehe auch: https://docs.python.org/2/library/struct.html

+0

sollte dies in python2 und 3 funktionieren ... –

+1

Es sollte 'struct.unpack ("> i "," f483 ") [0]' sein. Siehe [hier] (http://repl.it/pIt). – mbomb007

+0

es wird nicht für etwas größer als int32 natürlich funktionieren. irgendwelche Hinweise? –

2

Verwenden Sie das struct Modul Ihr Bytes in ganzen Zahlen entpacken.

import struct 
>>> struct.unpack("<L", "y\xcc\xa6\xbb")[0] 
3148270713L 
+0

das packt sie einfach in Bytes aus ... er will sie alle als 1 32-Bit-Integer ... vielleicht größer ... aber du hast Recht, dass stuct das zu verwendende Modul ist :) –

+1

Ich wusste nicht, dass er das tatsächlich benötigt ganzzahlige Werte, aber ja, behoben. – SanketDG