2015-05-22 16 views
6

Tôi đang cố gắng tạo dự án python2.7 và 3 tương thích và python 3 có phương thức int.from_bytes được tạo sẵn. Liệu tương đương tồn tại trong python 2,7 hoặc thay vì những gì sẽ là cách tốt nhất để làm cho mã này 2,7 ​​và 3 tương thích?python 2.7 tương đương với phương thức tích hợp int.from_bytes

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

Nếu bạn đang tìm kiếm giải pháp đa phiên bản cụ thể thì bạn nên làm rõ điều này trong tiêu đề. –

Trả lời

14

Bạn có thể đối xử với nó như một mã hóa (Python 2 cụ thể):

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

Hoặc bằng Python 2 và Python 3:

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

Ưu điểm là chuỗi không giới hạn với một giả định kích thước cụ thể. Những bất lợi là nó là unsigned.

+0

hah Tôi thích giải pháp này ... rất nhiều ... cái tôi không nghĩ đến :) nó có lợi thế nhất là không cần phải biết bất cứ điều gì về đầu vào –

+0

Trân trọng hơn là nó sẽ hoạt động trong Python 2 và 3. Cảm ơn tho – dawg

+0

nếu bạn sử dụng codecs.encode của bạn cũng nên quá –

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

có lẽ?

> nghĩa lớn về cuối nhỏ và i phương tiện ký 32 bit int

xem thêm: https://docs.python.org/2/library/struct.html

+0

điều này sẽ làm việc trong python2 và 3 ... –

+1

Nó phải là 'struct.unpack ("> i "," f483 ") [0]'. Xem [tại đây] (http://repl.it/pIt). – mbomb007

+0

nó sẽ không làm việc cho bất cứ điều gì lớn hơn int32 của khóa học. bất kỳ gợi ý nào? –

2

Sử dụng các module struct để giải nén byte của bạn thành số nguyên.

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

mà chỉ cần unpacks chúng thành byte ... anh ta muốn tất cả chúng như 1 số nguyên 32 bit ... có thể lớn hơn ... nhưng bạn là đúng rằng stuct là mô-đun để sử dụng :) –

+1

Tôi đã không nhận ra anh ta cần thực tế giá trị số nguyên, nhưng vâng, cố định. – SanketDG

Các vấn đề liên quan