Hướng dẫn python add bytes to string - python thêm byte vào chuỗi

Đầu tiên, tại sao tôi có một chuỗi ở đây, thay vì một mảng byte?

Bởi vì đó là những gì

struct.pack('80s',string_of_64_bytes)
4 trở lại ...

Thứ hai, nếu tôi xử lý một chuỗi, làm cách nào để viết một số byte có giá trị 0 đến cuối chuỗi đó?

Bạn không thể viết nó lên chuỗi đó vì các chuỗi là bất biến. Tuy nhiên, bạn có thể viết nó lên một chuỗi khác và tạo các chuỗi mới bằng cách kết hợp:

>>> import struct
>>> input_chunk = 'foo bar baz'
>>> input_chunk + struct.pack('16B',*([0]*16))
'foo bar baz\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> 

Lưu ý rằng nếu bạn biết rằng bạn có 64 byte và bạn muốn một chuỗi có 80 byte được đệm bằng null,

struct.pack('80s',string_of_64_bytes)
5 sẽ tự động đệm nó bằng nulls:will pad it automatically with nulls:

struct.pack('80s',string_of_64_bytes)

Đối với ký tự định dạng 'S', số đếm được hiểu là kích thước của chuỗi, không phải là số lượng lặp lại như đối với các ký tự định dạng khác; Ví dụ: '10s' có nghĩa là một chuỗi 10 byte duy nhất, trong khi '10c' có nghĩa là 10 ký tự. Nếu một số đếm không được đưa ra, nó mặc định là 1. Đối với việc đóng gói, chuỗi bị cắt hoặc đệm với các byte null khi thích hợp để làm cho nó phù hợp. Để giải nén, chuỗi kết quả luôn có chính xác số byte được chỉ định. Như một trường hợp đặc biệt, '0s' có nghĩa là một chuỗi duy nhất, trống (trong khi '0c' có nghĩa là 0 ký tự).

Giới thiệu

Trong bài viết này, chúng ta sẽ xem xét cách chuyển đổi byte thành một chuỗi trong Python. Đến cuối bài viết này, bạn sẽ có một ý tưởng rõ ràng về những loại này là gì và làm thế nào để xử lý dữ liệu một cách hiệu quả bằng cách sử dụng chúng.

Tùy thuộc vào phiên bản Python bạn đang sử dụng, nhiệm vụ này sẽ khác nhau. Mặc dù Python 2 đã kết thúc cuộc đời, nhiều dự án vẫn sử dụng nó, vì vậy chúng tôi sẽ bao gồm cả hai phương pháp Python 2 và Python 3.

Chuyển đổi byte thành chuỗi trong Python 3

Kể từ Python 3, cách làm ascii cũ phải đi, và Python trở nên hoàn toàn đơn giản.

Điều này có nghĩa là chúng tôi đã mất loại unicode rõ ràng:

struct.pack('80s',string_of_64_bytes)
6 - Mỗi chuỗi là
struct.pack('80s',string_of_64_bytes)
6!

Để phân biệt các chuỗi này với các bytests cũ tốt, chúng tôi được giới thiệu với một nhà xác định mới cho chúng -

struct.pack('80s',string_of_64_bytes)
8.

Điều này đã được thêm vào Python 2.6, nhưng nó không phục vụ mục đích thực sự nào ngoài việc chuẩn bị cho Python 3 vì tất cả các chuỗi đều là bytestrings trong 2.6.

Bytestrings trong Python 3 chính thức được gọi là

struct.pack('80s',string_of_64_bytes)
9, một chuỗi số nguyên bất biến trong phạm vi 0

Chuyển đổi byte thành chuỗi bằng giải mã ()

Chúng ta hãy xem cách chúng ta có thể chuyển đổi byte thành một chuỗi, sử dụng phương thức

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
3 tích hợp cho lớp
struct.pack('80s',string_of_64_bytes)
9:

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"

Chuyển định dạng mã hóa, chúng tôi đã giải mã đối tượng

struct.pack('80s',string_of_64_bytes)
9 thành một chuỗi và in nó.

Chuyển đổi byte thành chuỗi với codecs

Ngoài ra, chúng tôi cũng có thể sử dụng mô-đun

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
6 tích hợp cho mục đích này:

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"

Tuy nhiên, bạn không thực sự cần phải vượt qua tham số mã hóa

>>> codecs.decode(b)
"Let's grab a 🍕!"

Chuyển đổi byte thành chuỗi bằng str ()

Cuối cùng, bạn có thể sử dụng hàm

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
7, chấp nhận các giá trị khác nhau và chuyển đổi chúng thành các chuỗi:

>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'
>>> str(b, 'UTF-8')
"Let's grab a 🍕!"

Đảm bảo cung cấp đối số mã hóa cho

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
7, nếu không bạn có thể nhận được một số kết quả bất ngờ:

>>> str(b)
b'Lets grab a \xf0\x9f\x8d\x95!'

Điều này đưa chúng ta đến mã hóa một lần nữa. Nếu bạn chỉ định mã hóa sai, trường hợp tốt nhất là chương trình của bạn bị sập vì nó không thể giải mã dữ liệu. Ví dụ: nếu chúng tôi đã thử sử dụng chức năng

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
7 với
>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
0, chúng tôi sẽ được chào đón:

>>> str(b, 'UTF-16')
'敌❴\u2073牧扡愠\uf020趟↕'

Điều này thậm chí còn quan trọng hơn khi Python 3 thích giả định Unicode - vì vậy nếu bạn đang làm việc với các tệp hoặc nguồn dữ liệu sử dụng mã hóa tối nghĩa, hãy đảm bảo chú ý thêm.

Chuyển đổi byte thành chuỗi trong Python 2

Trong Python 2, một bó byte và một chuỗi thực tế là cùng một thứ - các chuỗi là các đối tượng bao gồm các ký tự dài 1 byte, có nghĩa là mỗi ký tự có thể lưu trữ 256 giá trị. Đó là lý do tại sao chúng đôi khi được gọi là bytestrings.bytestrings.

Điều này thật tuyệt khi làm việc với dữ liệu byte - chúng tôi chỉ tải nó vào một biến và chúng tôi đã sẵn sàng để in:

>>> s = "Hello world!"

>>> s
'Hello world!'

>>> len(s)
12

Sử dụng các ký tự unicode trong bytestrings không thay đổi hành vi này một chút: mặc dù:

>>> s = "Let's grab a 🍕!"

>>> s
'Lets grab a \xf0\x9f\x8d\x95!'
# Where has the pizza gone to?

>>> len(s)
17
# Shouldn't that be 15?

Chuyển đổi byte thành unicode (Python 2)

Ở đây, chúng ta sẽ phải sử dụng loại

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
1 của Python 2, được giả định và tự động sử dụng trong Python 3. Điều này lưu trữ các chuỗi dưới dạng một loạt các điểm mã, thay vì byte.

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
2 đại diện cho các byte là số HEX hai chữ số vì Python không biết cách đại diện cho chúng dưới dạng các ký tự ASCII:

struct.pack('80s',string_of_64_bytes)
0

Như bạn có thể thấy ở trên, chuỗi Unicode chứa

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
3 - một ký tự thoát ra Unicode mà thiết bị đầu cuối của chúng tôi bây giờ biết cách in ra như một lát bánh pizza! Cài đặt điều này dễ dàng như sử dụng trình xác định
>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
4 trước giá trị của byteString.

Vì vậy, làm thế nào để tôi chuyển đổi giữa hai?

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Bạn có thể nhận được chuỗi unicode bằng cách giải mã bytestring của bạn. Điều này có thể được thực hiện bằng cách xây dựng một đối tượng Unicode, cung cấp bytestring và một chuỗi chứa tên mã hóa dưới dạng đối số hoặc bằng cách gọi

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
5 trên một bytestring.

Chuyển đổi byte thành chuỗi bằng Decode () (Python 2)

Bạn cũng có thể sử dụng

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
6 từ mô -đun
>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
6.

struct.pack('80s',string_of_64_bytes)
1

Chuyển đổi byte thành chuỗi bằng cách sử dụng codecs (Python 2)

Hoặc, sử dụng mô -đun

>>> b = b"Lets grab a \xf0\x9f\x8d\x95!"
# Let's check the type
>>> type(b)
<class 'bytes'>

# Now, let's decode/convert them into a string
>>> s = b.decode('UTF-8')
>>> s
"Let's grab a 🍕!"
6:

struct.pack('80s',string_of_64_bytes)
2

Hãy chú ý đến mã hóa của bạn

Một lời cảnh báo ở đây - byte có thể được giải thích khác nhau trong các mã hóa khác nhau. Với khoảng 80 mã hóa khác nhau có sẵn ngoài hộp, có thể không dễ để biết nếu bạn có đúng!80 different encodings available out of the box, it might not be easy to know if you've got the right one!

struct.pack('80s',string_of_64_bytes)
3

Thông báo ban đầu là

>>> import codecs
>>> b = b'Lets grab a \xf0\x9f\x8d\x95!'

>>> codecs.decode(b, 'UTF-8')
"Let's grab a 🍕!"
9 hoặc
>>> codecs.decode(b)
"Let's grab a 🍕!"
0 và cả hai dường như là chuyển đổi hợp lệ.

Sự kết luận

Là lập trình viên, có một số điều chúng ta phải liên tục nghĩ đến và tích cực chuẩn bị để tránh những cạm bẫy. Điều này đặc biệt đúng ở cấp độ thấp hơn, nơi chúng ta hiếm khi đi khi chúng ta sử dụng một ngôn ngữ cấp cao như Python làm trình điều khiển hàng ngày của chúng ta.

Những thứ như ký tự, mã hóa và nhị phân ở đó để nhắc nhở chúng ta rằng công việc của chúng ta là mã hóa - mã hóa suy nghĩ của chúng ta thành các giải pháp làm việc. Rất may, rất nhiều suy nghĩ này trở thành một phần của thói quen của chúng tôi sau một vài vòng tại bàn phím.code - to encode our thoughts into working solutions. Thankfully, a lot of this thinking becomes part of our routine after a few rounds at the keyboard.

Trong bài viết này, chúng tôi đã đi qua cách chuyển đổi byte thành chuỗi trong Python.

Làm thế nào để bạn viết byte của một chuỗi trong Python?

Chúng ta có thể sử dụng lớp byte tích hợp trong Python để chuyển đổi chuỗi thành byte: chỉ cần chuyển chuỗi làm đầu vào đầu tiên của hàm tạo của lớp byte và sau đó chuyển mã hóa làm đối số thứ hai. In đối tượng hiển thị một biểu diễn văn bản thân thiện với người dùng, nhưng dữ liệu có trong đó là trong byte.use the built-in Bytes class in Python to convert a string to bytes: simply pass the string as the first input of the constructor of the Bytes class and then pass the encoding as the second argument. Printing the object shows a user-friendly textual representation, but the data contained in it is​ in bytes.

Làm thế nào để bạn thêm hai byte trong Python?

Để tham gia một danh sách các byte, hãy gọi phương thức byte.join (danh sách). Nếu bạn cố gắng tham gia một danh sách các byte trên một dấu phân cách chuỗi, Python sẽ ném một kiểu mẫu, vì vậy hãy đảm bảo gọi nó trên đối tượng byte b ''. tham gia(...)call the Byte. join(list) method. If you try to join a list of Bytes on a string delimiter, Python will throw a TypeError , so make sure to call it on a Byte object b' '. join(...)

Làm thế nào để bạn kết hợp một chuỗi và một byte trong Python?

Python Concatenate String và Byte để nối các chuỗi và byte Chúng tôi sẽ sử dụng toán tử + để kết nối, và chúng tôi cũng sử dụng str () để chuyển đổi byte thành loại chuỗi, và sau đó nó sẽ được nối.Để có được đầu ra, tôi đã sử dụng in (my_str + str (byte)).use the + operator to concatenate, and also we use str() to convert the bytes to string type, and then it will be concatenated. To get the output, I have used print(my_str + str(bytes)).

Làm thế nào để bạn thêm một chuỗi vào một byte?

Chúng ta có thể sử dụng phương thức chuỗi getBytes () để mã hóa chuỗi thành chuỗi byte bằng cách sử dụng ký tự mặc định của nền tảng.Phương pháp này bị quá tải và chúng ta cũng có thể vượt qua Charset làm đối số.use String class getBytes() method to encode the string into a sequence of bytes using the platform's default charset. This method is overloaded and we can also pass Charset as argument.