Tôi đang đọc trong một mảng/danh sách byte từ ổ cắm. Tôi muốn Python để xử lý các byte đầu tiên như là một "số nguyên 8 bit unsigned". Làm thế nào là nó có thể nhận được giá trị số nguyên của nó như là một số nguyên 8 bit không dấu?Chuyển đổi byte Python thành "số nguyên 8 bit không dấu"
Trả lời
Sử dụng mô-đun struct.
import struct
value = struct.unpack('B', data[0])[0]
Lưu ý rằng việc giải nén luôn trả về một bộ, ngay cả khi bạn chỉ giải nén một mục.
Ngoài ra, hãy xem this SO question.
bạn có thể hiển thị như thế nào không? – bbb
vì vậy những gì được lưu trữ trong struct.unpack ('B', dữ liệu [0]) [1]? – bbb
dữ liệu [0] là byte đầu tiên bạn nhận được. unpack ("B", dữ liệu [0]) xử lý byte đó là số nguyên không dấu 8 bit (được gọi là unsigned char trong C) và trả về một tuple chứa số nguyên đó (bạn đã vượt qua 2 byte để giải nén, bạn sẽ làm gì đó như giải nén ("BB", dữ liệu [0: 2]) và lấy lại 2 bộ). [0] cuối cùng nhận được mục đầu tiên (và duy nhất) trong tuple. – codeape
byte/bytearray là một chuỗi các số nguyên. Nếu bạn chỉ cần truy cập vào một phần tử bằng cách chỉ số của nó bạn sẽ có một số nguyên:
>>> b'abc'
b'abc'
>>> _[0]
97
Theo định nghĩa rất họ, byte và bytearrays chứa số nguyên trong range(0, 256)
. Vì vậy, chúng là "số nguyên 8 bit không dấu".
ví dụ, tôi có điều này trong mã phía máy chủ của tôi data = conn.recv (1000000) miễn là tôi hiểu tôi nhận byte ... vì vậy tôi muốn dữ liệu [0] được coi là "số nguyên không dấu 8 bit". sao có thể như thế được? – bbb
Điều này chỉ hoạt động trong Python 3.x. Python 2.6 có cú pháp b'string literal, nhưng nó chỉ là một bí danh cho str, và các phiên bản cũ hơn sẽ cung cấp cho bạn một SyntaxError. – musicinmybrain
@musicinmybrain: đó là lý do tại sao câu hỏi này được gắn thẻ là 'python-3.x' Tôi đoán – SilentGhost
Một tùy chọn rất hợp lý và đơn giản, nếu bạn chỉ cần giá trị số nguyên byte đầu tiên, sẽ là một cái gì đó như sau:
value = ord(data[0])
Nếu bạn muốn giải nén tất cả các yếu tố của dữ liệu nhận được bạn cùng một lúc (và chúng không chỉ là một mảng đồng nhất), hoặc nếu bạn đang xử lý các đối tượng nhiều byte như các số nguyên 32 bit, thì bạn sẽ cần phải sử dụng một cái gì đó giống như mô-đun struct.
- 1. Chuyển đổi byte thành bit trong python
- 2. Chuyển đổi 2 byte thành số nguyên
- 3. Chuyển đổi số nguyên không dấu 32 bit (lớn cuối) thành dài và quay lại
- 4. cách chuyển đổi hai byte thành một số 16 bit?
- 5. Chuyển đổi số nguyên 32 bit thành 4 byte dữ liệu trong javascript
- 6. Làm cách nào để chuyển đổi các byte 8 bit thành các ký tự 6 bit?
- 7. Chuyển đổi Byte Array thành bit Array?
- 8. Python, cách đặt số nguyên 32 bit vào mảng byte
- 9. Python: Chuyển đổi chuỗi thành số nguyên
- 10. Python chuyển đổi Tuple thành Số nguyên
- 11. Chuyển đổi số nguyên thành một bit đại diện
- 12. Javascript - chuyển đổi số nguyên thành mảng của các bit
- 13. Làm cách nào để chuyển đổi bit thành byte?
- 14. Làm thế nào để chuyển đổi một byte thành bit?
- 15. Sửa đổi các bit trong một số nguyên trong Python
- 16. Chuyển đổi 2 byte thành một số
- 17. Chuyển đổi số nguyên thành giá trị Hex 2 byte trong Python
- 18. Chuyển đổi sbyte thành byte
- 19. Chuyển đổi chuỗi bằng dấu phẩy thành số nguyên
- 20. Làm thế nào để chuyển đổi BufferedImage thành 8 bit?
- 21. Chuyển đổi biểu diễn chuỗi các bit thành một byte
- 22. chuyển đổi số nguyên thành danh sách trong python
- 23. Chuyển đổi số nguyên 64 bit từ chuỗi
- 24. Chuyển đổi n-byte int thành byte trong python3
- 25. Chuyển đổi mảng byte (mảng char) thành kiểu số nguyên (ngắn, int, dài)
- 26. Chuyển đổi từ số nguyên 32 bit thành 4 ký tự
- 27. Làm cách nào để chuyển đổi một phần của một bộ mã vạch python (mảng byte) thành một số nguyên
- 28. C bit đảo ngược trong số nguyên không dấu
- 29. SSE: chuyển đổi số nguyên ngắn thành phao
- 30. Java Chuyển đổi số nguyên thành số nguyên hex
Nếu bạn sẵn sàng chấp nhận sự phụ thuộc vào 'numpy', một số hàm của chúng có một' dtype' arg, mà bạn có thể đặt thành 'numpy.uint8'. Ví dụ: 'bytestream = numpy.fromfile (infile, dtype = numpy.uint8)' – CrazyPyro