Tôi hiện đang làm việc trên một chương trình mã hóa / giải mã và tôi cần có thể chuyển đổi byte thành số nguyên. Tôi biết điều đó:
bytes([3]) = b'\x03'
Tuy nhiên, tôi không thể tìm ra cách làm ngược lại. Tôi đang làm gì sai khủng khiếp?
Tôi hiện đang làm việc trên một chương trình mã hóa / giải mã và tôi cần có thể chuyển đổi byte thành số nguyên. Tôi biết điều đó:
bytes([3]) = b'\x03'
Tuy nhiên, tôi không thể tìm ra cách làm ngược lại. Tôi đang làm gì sai khủng khiếp?
Câu trả lời:
Giả sử bạn đang sử dụng ít nhất 3.2, có một tính năng được tích hợp sẵn cho việc này :
int.from_bytes ( byte, byteorder, *, sign = False )
...
Các byte đối số phải là một đối tượng giống byte hoặc một byte tạo ra có thể lặp lại.
Đối số byteorder xác định thứ tự byte được sử dụng để biểu diễn số nguyên. Nếu thứ tự byte là "lớn", byte quan trọng nhất ở đầu mảng byte. Nếu thứ tự byte là "nhỏ", byte quan trọng nhất nằm ở cuối mảng byte. Để yêu cầu thứ tự byte gốc của hệ thống máy chủ, hãy sử dụng sys.byteorder làm giá trị thứ tự byte.
Đối số có dấu cho biết liệu phần bù của hai có được sử dụng để biểu diễn số nguyên hay không.
## Examples:
int.from_bytes(b'\x00\x01', "big") # 1
int.from_bytes(b'\x00\x01', "little") # 256
int.from_bytes(b'\x00\x10', byteorder='little') # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) #-1024
int.from_bytes
và ord(b'\x03')
đối với byte / ký tự đơn không?
int.from_bytes
có thể giải thích các byte như là một số nguyên ký nếu bạn nói với nó để - int.from_bytes(b'\xe4', "big", signed=True)
lợi nhuận -28, trong khi ord()
hoặc int.from_bytes
trong lợi nhuận chế độ unsigned 228.
Danh sách các byte có thể chỉ ra được (ít nhất là trong Python 3.6). Bằng cách này, bạn có thể truy xuất giá trị thập phân của từng byte riêng lẻ.
>>> intlist = [64, 4, 26, 163, 255]
>>> bytelist = bytes(intlist) # b'@x04\x1a\xa3\xff'
>>> for b in bytelist:
... print(b) # 64 4 26 163 255
>>> [b for b in bytelist] # [64, 4, 26, 163, 255]
>>> bytelist[2] # 26
int.from_bytes( bytes, byteorder, *, signed=False )
không hoạt động với tôi Tôi đã sử dụng chức năng từ trang web này, nó hoạt động tốt
https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python
def bytes_to_int(bytes):
result = 0
for b in bytes:
result = result * 256 + int(b)
return result
def int_to_bytes(value, length):
result = []
for i in range(0, length):
result.append(value >> (i * 8) & 0xff)
result.reverse()
return result
struct
mô-đun nếu bạn muốn chuyển đổi nhiều biến cùng một lúc.