Làm thế nào tôi có thể chuyển đổi một chuỗi các byte thành một int trong python?chuyển đổi một chuỗi các byte thành một int (python)
nói như thế này: 'y\xcc\xa6\xbb'
tôi đã đưa ra một/cách ngu ngốc thông minh để làm việc đó:
sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))
Tôi biết có phải được một cái gì đó được xây dựng trong hoặc trong thư viện chuẩn mà không hơn này đơn giản ...
Điều này khác với converting a string of hex digits mà bạn có thể sử dụng int (xxx, 16), nhưng thay vào đó tôi muốn chuyển đổi một chuỗi giá trị byte thực.
UPDATE:
tôi giống như James' câu trả lời tốt hơn một chút vì nó không đòi hỏi nhập khẩu mô-đun khác, nhưng phương pháp Greg là nhanh hơn:
>>> from timeit import Timer
>>> Timer('struct.unpack("<L", "y\xcc\xa6\xbb")[0]', 'import struct').timeit()
0.36242198944091797
>>> Timer("int('y\xcc\xa6\xbb'.encode('hex'), 16)").timeit()
1.1432669162750244
phương pháp hacky của tôi:
>>> Timer("sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))").timeit()
2.8819329738616943
THÔNG TIN CẬP NHẬT THÊM:
Ai đó đã hỏi ý kiến những gì pr với biểu tượng nhập mô-đun khác. Vâng, nhập khẩu một mô-đun không nhất thiết phải là giá rẻ, hãy xem:
>>> Timer("""import struct\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""").timeit()
0.98822188377380371
Bao gồm các chi phí nhập khẩu các mô-đun phủ nhận hầu hết các lợi thế mà phương pháp này có. Tôi tin rằng điều này sẽ chỉ bao gồm chi phí nhập khẩu một lần cho toàn bộ hoạt động chuẩn; hãy xem điều gì sẽ xảy ra khi tôi buộc tải lại mỗi lần:
>>> Timer("""reload(struct)\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""", 'import struct').timeit()
68.474128007888794
Không cần phải nói, nếu bạn thực hiện rất nhiều lần thực hiện phương pháp này cho mỗi lần nhập, điều này sẽ ít tương xứng với vấn đề. Nó cũng có thể i/o chi phí hơn là CPU vì vậy nó có thể phụ thuộc vào khả năng và tải đặc điểm của máy cụ thể.
và nhập nội dung nào đó từ lib chuẩn là xấu, tại sao? – hop
andyway, sao chép: http://stackoverflow.com/questions/5415/convert-bytes-to-floating-point-numbers-in-python – hop
"cập nhật thêm" của bạn là lạ ... tại sao bạn sẽ nhập mô-đun như vậy thường xuyên? – hop