Мне нужно было отправить пользователю сообщение в моем приложении чата по сети. Поскольку вы не можете отправить необработанное сообщение по сети, рекомендуется преобразовать сообщение в байты и отправить его по сети.
Для этого сначала мне пришлось преобразовать сообщение в массив байтов, а затем отправить его по сети. Я исследовал Интернет и нашел три решения для преобразования строки в массив байтов.
Метод, который я использовал для преобразования строки в байт, был bytearray(), после конвертации я отправил данные по сети на другой конец.
Я хочу прояснить ваши понятия о преобразовании строки в байт. Строка представляет собой набор символов, тогда как массив байтов представляет собой набор последовательности байтов.
В строке вы можете представить каждый символ как числовое значение на основе схемы кодировки символов, например ASCII, UTF-8 или UTF-16.
Эта схема кодировки символов содержит список, показывающий, как представить каждый символ в виде числового значения. Например, схема кодировки символов ASCII определяет символ или букву «А» с использованием числового значения 65.
Эти числовые значения в схеме кодирования символов называются байтовыми значениями. Таким образом, преобразование строки в массив байтов означает преобразование каждого символа строки в соответствующее ему значение байта на основе схемы кодирования символов.
В Python существует несколько способов преобразования любой строки в массив байтов.
С использованием функции bytes()
Функция Python bytes() принимает два значения: объекты, которые вы хотите преобразовать в массив байтов, и схему кодирования, основанную на объекте, преобразуемом в байты.
Синтаксис:
bytes(objects, encoding)
Где:
- bytes(): это функция преобразования данных объектов в байты.
- objects: это объекты, которые вы хотите преобразовать в байты; в нашем случае мы будем использовать строку.
- encoding: укажите кодировку символов, которую вы хотите использовать при преобразовании объектов в массив байтов.
Например, предположим, что у вас есть переменная Product_description, содержащая строку, показанную ниже.
product_description = "Compatible with heavy appliances like ACs, Heaters, Geysers, Water Pumps etc."
Чтобы преобразовать это описание продукта в строковую форму на основе схемы кодировки «UTF-8», вы можете использовать функцию bytes(), как показано в коде ниже.
bytes_array = bytes(product_description,'utf-8')
Вышеуказанное преобразует строку в массив байтов и сохраняет ее в переменной с именем «bytes_array». Помните, что функция bytes() возвращает объект bytes, который не является изменяемым, что означает, что вы не можете его изменить.
Проверьте заданный тип строки до и после преобразования, чтобы убедиться, что он преобразован в массив байтов.
print("The string type before conversion", product_description) print("The string type after conversion", bytes_array)
Посмотрите на результат. Строка до преобразования видна, но после преобразования вы можете увидеть букву(«b»), обозначенную кружком на рисунке выше.
Это означает, что это байтовые данные, или ваша строка представлена с использованием массива байтов: посмотрите на эту строку (b’ Совместимость с тяжелыми устройствами, такими как AC). Здесь она содержит букву «b» в качестве префикса, что означает, что эта строка представляет собой массив байтов.
С использованием bytearray()
В Python есть функция bytearray(), которая выполняет ту же задачу, что и функция bytes(), которую вы узнали в предыдущем разделе. Разница в том, что byte() возвращает неизменяемые объекты, а bytearray() возвращает изменяемые объекты.
Когда вы преобразуете строку в массив байтов, функция bytearray() возвращает байтовый объект, который вы можете изменить, но байтовый объект, возвращаемый функцией bytes(), изменить нельзя.
Синтаксис:
bytearray(строка, кодировка)
Где:
- bytearray(): функция преобразует заданную строку в массив байтов.
- строка: строковые объекты, которые вы хотите преобразовать в байты.
- кодировка: укажите кодировку символов, которую вы хотите использовать при преобразовании объектов в массив байтов.
Например, у вас есть переменная с именем «about», которая содержит информацию о пользователе в строковой форме, как показано ниже.
about="Hey, I am MacLen and I am engineer by profession"
Теперь передайте строку в переменной «about» в функцию bytearray() с кодировкой «utf-16», как показано в коде ниже.
bytes_array_data = bytearray(about, 'utf-16')
Далее посмотрите, как выглядит строка после преобразования в массив байтов, используя приведенный ниже код.
print("The string before conversion", about) print("The string after conversion", bytes_array_data)
Из приведенного выше вывода видно, что строка преобразуется в массив байтов с помощью функции bytearray(), которая возвращает массив байтов в виде ‘bytearray(b’\xff\xfeH\x00e\x00y\x00,\x00 \x00I\x00 )’.
С использованием функции encode()
Функция encode() Python кодирует строку в байты на основе указанной схемы кодирования.
Синтаксис:
string.encode(encoding=encoding)
Где:
- string: это строка, которую вы хотите преобразовать в байт.
- encode (encoding=encoding): этот метод вызывается для строки с указанной схемой кодирования для преобразования этой строки в байты, но если вы не предоставляете схему кодировки, по умолчанию он использует «utf-8».
Например, посмотрите на приведенный ниже код.
string = "I walk two km everyday" byte_value = string.encode() print(byte_value)
Посмотрите на результат: он преобразовал данную строку в массив байтов типа («Я хожу два километра каждый день»).
По умолчанию он использует схему кодировки «utf-8», и мы не предоставили схему кодировки, если вы посмотрите на string.encode().