Hướng dẫn convert binary to bytes python - chuyển đổi nhị phân sang byte python

Bạn phải chuyển đổi nó thành INT và lấy 8 bit một lần, hoặc cắt nó thành các chuỗi dài 8 byte và sau đó chuyển đổi từng bi thành Ints. Trong Python 3, khi các câu trả lời của PM 2ring và J.F Sebastian, phương pháp

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
8 của
>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
9 cho phép bạn thực hiện phương pháp đầu tiên rất hiệu quả. Điều này không có sẵn trong Python 2, vì vậy đối với những người bị mắc kẹt với điều đó, phương pháp thứ hai có thể hiệu quả hơn. Đây là một ví dụ:

>>> s = "0110100001101001"
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'

Để phá vỡ điều này, câu lệnh Range bắt đầu tại INDEX 0 và cung cấp cho chúng tôi các chỉ số vào chuỗi nguồn, nhưng tiến lên 8 chỉ số tại một thời điểm. Vì

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
0 dài 16 ký tự, nó sẽ cung cấp cho chúng tôi hai chỉ số:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]

.

Sau đó, chúng ta có thể xây dựng dựa trên điều này để phá vỡ chuỗi bằng cách lấy các lát của nó dài 8 ký tự:

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']

Sau đó, chúng ta có thể chuyển đổi từng điều đó thành số nguyên, cơ sở 2:

>>> list(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
[104, 105]

Và cuối cùng, chúng tôi kết thúc toàn bộ điều trong

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
2 để nhận được câu trả lời:

>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'

Đă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 đối tượng >>> [s[i : i + 8] for i in range(0, len(s), 8)] ['01101000', '01101001'] 3 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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
4:

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ố

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
5 trước mặt nó.

Rằng

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
5 giống như
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
7 trước khi chuỗi F hoặc
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
8 trước một chuỗi thô. Nhưng
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
5 đó không thực sự tạo ra một chuỗi, nó tạo ra một đối tượng
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3:

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

Các chuỗi đại diện cho văn bản, đối tượng >>> [s[i : i + 8] for i in range(0, len(s), 8)] ['01101000', '01101001'] 3 đạ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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3?

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

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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 đạ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ừ
>>> list(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
[104, 105]
4 đến
>>> list(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
[104, 105]
5) đạ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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 bằng cách chuyển nó cho hàm tạo
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3:

>>> 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:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
0

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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 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ế độ

>>> list(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
[104, 105]
9, 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.

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3.will not be a string, it'll be a
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 object
.

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
2

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

>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
1, chúng tôi nhận được một đối tượng
>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 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:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
3

Cách chuyển đổi >>> [s[i : i + 8] for i in range(0, len(s), 8)] ['01101000', '01101001'] 3 thành một chuỗi

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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 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
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
5 của nó:turn it into a string by calling its
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
5 method:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
4

Phương thức

>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
5 (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à
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
7. 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à
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
7, thì đó 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:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
5

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

Nếu vì một 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

>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
9 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
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
9 method on that string to encode it into bytes:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
6

Giống như

>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
5, phương thức
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
9 mặc định sử dụng
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
7, nhưng bạn có thể chỉ định một mã hóa ký tự khác nếu bạn muốn:

>>> list(range(0, 50, 8))
[0, 8, 16, 24, 32, 40, 48]
>>> list(range(0, len(s), 8))
[0, 8]
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

>>> [s[i : i + 8] for i in range(0, len(s), 8)]
['01101000', '01101001']
3 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
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
5 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
>>> bytes(int(s[i : i + 8], 2) for i in range(0, len(s), 8))
b'hi'
5 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 nhị phân trong Python?

Viết byte vào tệp trong Python Ví dụ 1: Mở tệp ở chế độ ghi nhị phân và sau đó chỉ định nội dung để ghi dưới dạng byte.Tiếp theo, sử dụng chức năng ghi để viết nội dung byte vào tệp nhị phân.use the write function to write the byte contents to a binary file.

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 một số thành một byte trong Python?

Giá trị INT có thể được chuyển đổi thành byte bằng cách sử dụng phương thức int.to_bytes ().int. to_bytes().

Một chuỗi nhị phân là bao nhiêu byte?

Khi các loại, các cột và biến khác nhau có độ dài phân khác nhau được xác định, độ dài tối đa được chỉ định và điều này trở thành thuộc tính độ dài.Giá trị thực tế có thể có độ dài nhỏ hơn.Đối với một chuỗi nhị phân có độ dài khác nhau, thuộc tính độ dài phải bao gồm từ 1 đến 32 740 byte.between 1 through 32 740 bytes inclusive.