Hướng dẫn python bytes object to binary - đối tượng python byte thành nhị phân

13

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi muốn chuyển đổi một đối tượng loại byte thành biểu diễn nhị phân trong Python 3.x.

Ví dụ, tôi muốn chuyển đổi đối tượng byte

error struct.error: unpack requires a bytes object of length 2
8 thành biểu diễn nhị phân
error struct.error: unpack requires a bytes object of length 2
9 trong nhị phân (hoặc 17 trong thập phân).

Tôi đã thử điều này:

print(struct.unpack("h","\x11"))

Nhưng tôi đang nhận được:

error struct.error: unpack requires a bytes object of length 2

Hướng dẫn python bytes object to binary - đối tượng python byte thành nhị phân

kiyah

1.4861 Huy hiệu vàng19 Huy hiệu bạc27 Huy hiệu đồng1 gold badge19 silver badges27 bronze badges

hỏi ngày 10 tháng 7 năm 2017 lúc 11:19Jul 10, 2017 at 11:19

Bắt đầu từ Python 3.2, bạn có thể sử dụng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
0.

Đối số thứ hai,

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
1, chỉ định tính endian của bytestring của bạn. Nó có thể là
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
2 hoặc
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
3. Bạn cũng có thể sử dụng
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
4 để lấy byteorder gốc của máy chủ.

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'

Đã trả lời ngày 10 tháng 7 năm 2017 lúc 11:32Jul 10, 2017 at 11:32

Hướng dẫn python bytes object to binary - đối tượng python byte thành nhị phân

4

Lặp lại đối tượng byte cung cấp cho bạn 8 ints mà bạn có thể dễ dàng định dạng để xuất trong biểu diễn nhị phân:

import numpy as np

>>> my_bytes = np.random.bytes(10)
>>> my_bytes
b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'

>>> type(my_bytes)
bytes

>>> my_bytes[0]
95

>>> type(my_bytes[0])
int

>>> for my_byte in my_bytes:
>>>     print(f'{my_byte:0>8b}', end=' ')

01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111

Một chức năng cho biểu diễn chuỗi hex được tích hợp:

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'

Đã trả lời ngày 22 tháng 9 năm 2020 lúc 23:28Sep 22, 2020 at 23:28

JimjimJim

1.2891 Huy hiệu vàng9 Huy hiệu bạc16 Huy hiệu đồng1 gold badge9 silver badges16 bronze badges

Đăng nhập vào tài khoản Python Barsels của bạn để lưu cài đặt screencast của bạn.

Vẫn chưa có tài khoản? Đăng ký tại đây.

Hãy nói về sự khác biệt giữa các chuỗi và byte trong Python.the difference between strings and bytes in Python.

Tạo các đối tượng import sys int.from_bytes(b'\x11', byteorder=sys.byteorder) # => 17 bin(int.from_bytes(b'\x11', byteorder=sys.byteorder)) # => '0b10001' 5 trong Python

Chuỗi đại diện cho văn bản (ngôn ngữ của con người). Ví dụ: ở đây chúng tôi có một chuỗi có tên

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
6:

Nhưng có một loại khác được liên kết chặt chẽ với các chuỗi, loại trông giống như tạo ra một chuỗi có tiền tố

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
7 trước mặt nó.

Rằng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
7 giống như
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
9 trước khi chuỗi F hoặc
import numpy as np

>>> my_bytes = np.random.bytes(10)
>>> my_bytes
b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'

>>> type(my_bytes)
bytes

>>> my_bytes[0]
95

>>> type(my_bytes[0])
int

>>> for my_byte in my_bytes:
>>>     print(f'{my_byte:0>8b}', end=' ')

01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111

0 trước một chuỗi thô. Nhưng
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
7 đó không thực sự tạo ra một chuỗi, nó tạo ra một đối tượng
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5:

>>> data
b'hello'
>>> type(data)

Chuỗi đại diện cho văn bản, đối tượng import sys int.from_bytes(b'\x11', byteorder=sys.byteorder) # => 17 bin(int.from_bytes(b'\x11', byteorder=sys.byteorder)) # => '0b10001' 5 đại diện cho dữ liệu nhị phân

Nếu chúng ta lặp qua một chuỗi trong Python, chúng ta sẽ lấy lại các chuỗi con đại diện cho từng ký tự trong chuỗi đó:sub-strings representing each of the characters in that string:

>>> text = "hello"
>>> list(text)
['h', 'e', 'l', 'l', 'o']

Bạn nghĩ chúng ta sẽ nhận được gì nếu chúng ta lặp qua một đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5?

>>> data = b"hello"
>>> list(data)

Vì các đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 đại diện cho dữ liệu nhị phân, khi chúng ta lặp lại chúng, chúng ta sẽ nhận được các số trở lại (từ
import numpy as np

>>> my_bytes = np.random.bytes(10)
>>> my_bytes
b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'

>>> type(my_bytes)
bytes

>>> my_bytes[0]
95

>>> type(my_bytes[0])
int

>>> for my_byte in my_bytes:
>>>     print(f'{my_byte:0>8b}', end=' ')

01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111

6 đến
import numpy as np

>>> my_bytes = np.random.bytes(10)
>>> my_bytes
b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'

>>> type(my_bytes)
bytes

>>> my_bytes[0]
95

>>> type(my_bytes[0])
int

>>> for my_byte in my_bytes:
>>>     print(f'{my_byte:0>8b}', end=' ')

01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111

7) đại diện cho từng byte trong dữ liệu nhị phân đó:representing each of the bytes in that binary data:

>>> data = b"hello"
>>> list(data)
[104, 101, 108, 108, 111]

Chúng ta cũng có thể làm điều ngược lại với điều này. Chúng ta có thể lấy một số lượng khác nhau và biến nó thành một đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 bằng cách chuyển nó cho hàm tạo
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5:

>>> nums = [0, 65, 97, 255]
>>> bytes(nums)
b'\x00Aa\xff'

Các đối tượng byte được sử dụng trong Python ở đâu?

Tất cả dữ liệu xuất phát từ bên ngoài quy trình Python của chúng tôi bắt đầu như byte. Nhưng nếu dữ liệu đó đại diện cho văn bản (và Python biết nó) Python sẽ tự động chuyển đổi nó thành chuỗi. that comes from outside of our Python process starts as bytes. But if that data represents text (and Python knows it) Python will convert it to strings automatically.

Nếu chúng tôi sử dụng mô -đun Urllib trong Python để thực hiện yêu cầu HTTP, dữ liệu mà chúng tôi lấy lại không được biểu diễn dưới dạng chuỗi:

error struct.error: unpack requires a bytes object of length 2
0

Dữ liệu chúng tôi nhận lại được biểu diễn dưới dạng đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 vì nó thậm chí có thể không đại diện cho văn bản. Rốt cuộc, một yêu cầu HTTP có thể gửi lại bất kỳ dữ liệu nào, thậm chí dữ liệu nhị phân tùy ý.it might not even represent text. After all, an HTTP request can send back any data, even arbitrary binary data.

Nếu chúng ta mở một tệp với chế độ

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
1, chúng ta sẽ mở tệp đó không ở chế độ đọc văn bản mặc định mà thay vào đó ở chế độ đọc nhị phân.

error struct.error: unpack requires a bytes object of length 2
1

Vì vậy, khi chúng tôi đọc từ tệp đó, dữ liệu mà chúng tôi nhận được từ đó sẽ không phải là một chuỗi, nó sẽ là một đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5.will not be a string, it'll be a
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 object
.

error struct.error: unpack requires a bytes object of length 2
2

Trên thực tế, trong trường hợp này, chúng tôi sẽ mở tệp

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
3, chúng tôi nhận được một đối tượng
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 với rất nhiều byte trong đó, bởi vì nó cần rất nhiều byte để thể hiện một hình ảnh:

error struct.error: unpack requires a bytes object of length 2
3

Cách chuyển đổi import sys int.from_bytes(b'\x11', byteorder=sys.byteorder) # => 17 bin(int.from_bytes(b'\x11', byteorder=sys.byteorder)) # => '0b10001' 5 thành một chuỗi

Nếu bạn kết thúc với một đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 trong Python và bạn biết rằng đối tượng đó đại diện cho văn bản, bạn có thể biến nó thành một chuỗi bằng cách gọi phương thức
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
7 của nó:turn it into a string by calling its
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
7 method:

error struct.error: unpack requires a bytes object of length 2
4

Phương thức

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
7 (không có bất kỳ đối số nào được truyền cho nó) sử dụng mã hóa ký tự mặc định là
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
9. Ngay cả khi chúng ta biết rằng dữ liệu chúng ta đang làm việc với việc sử dụng mã hóa ký tự mặc định đó là
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
9, thì nó được coi là một thông lệ tốt nhất để luôn chỉ định mã hóa byte của chúng ta:always specify the encoding of our bytes:

error struct.error: unpack requires a bytes object of length 2
5

Như Zen of Python nói, "rõ ràng luôn tốt hơn tiềm ẩn".

Nếu vì lý do nào đó, bạn có một chuỗi bạn muốn biến nó thành byte, bạn có thể gọi phương thức

>>> data
b'hello'
>>> type(data)

1 trên chuỗi đó để mã hóa nó thành byte:have a string you want to turn it into bytes, you can call the
>>> data
b'hello'
>>> type(data)

1 method on that string to encode it into bytes:

error struct.error: unpack requires a bytes object of length 2
6

Giống như

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
7, phương thức
>>> data
b'hello'
>>> type(data)

1 mặc định sử dụng
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
9, nhưng bạn có thể chỉ định một mã hóa ký tự khác nếu bạn muốn:

error struct.error: unpack requires a bytes object of length 2
7

Bản tóm tắt

Các chuỗi đại diện cho dữ liệu dựa trên văn bản, trong khi byte đại diện cho dữ liệu nhị phân (nghĩa là hình ảnh, video hoặc bất cứ thứ gì khác mà bạn có thể đại diện trên máy tính)., while bytes represent binary data (i.e. images, video, or anything else you could represent on a computer).

Tùy thuộc vào những gì bạn sử dụng Python cho, có lẽ bạn sẽ không gặp phải đối tượng

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
5 rất thường xuyên. Nhưng khi bạn làm, một điều có lẽ bạn sẽ muốn làm với họ là gọi phương thức
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
7 của họ để biến chúng thành một chuỗi (giả sử các byte đó đại diện cho văn bản).call their
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
7 method to turn them into a string
(assuming those bytes represent text).

Làm thế nào để bạn chuyển đổi byte thành các số trong Python?

Cú pháp: int.from_bytes (byte, byteorder, *, đã ký = false).
Parameters:.
Trả về - một int tương đương với byte đã cho ..

Byte () làm gì trong Python?

Hàm python byte () hàm byte () trả về đối tượng byte.Nó có thể chuyển đổi các đối tượng thành các đối tượng byte hoặc tạo đối tượng byte trống của kích thước được chỉ định.returns a bytes object. It can convert objects into bytes objects, or create empty bytes object of the specified size.

Làm thế nào để bạn chuyển đổi byte thành chuỗi trong Python?

Các cách khác nhau để chuyển đổi byte thành chuỗi trong Python:..
Sử dụng phương thức decode () ..
Sử dụng hàm str () ..
Sử dụng codec.Phương thức giải mã () ..
Sử dụng map () mà không sử dụng tiền tố B ..
Sử dụng gấu trúc để chuyển đổi byte thành chuỗi ..

Làm thế nào để bạn giải mã byte trong Python?

Decode () được sử dụng để giải mã byte cho một đối tượng chuỗi.Giải mã cho một đối tượng chuỗi phụ thuộc vào các đối số được chỉ định.Nó cũng cho phép chúng tôi đề cập đến một sơ đồ xử lý lỗi để sử dụng cho các lỗi phân biệt.Lưu ý: Byte là loại chuỗi nhị phân tích hợp trong Python. is used to decode bytes to a string object. Decoding to a string object depends on the specified arguments. It also allows us to mention an error handling scheme to use for seconding errors. Note: bytes is a built-in binary sequence type in Python.