Как перевести число в байты python
Перейти к содержимому

Как перевести число в байты python

  • автор:

Python, байты и числа в integer

Осваиваю постепенно пайтон, пишу программу для общения с AVR контроллером через блютуз. Из сокета я получаю данные в виде строки байт такого вида b’\xb1\xaa\xab\xac\xad\xae\xaf’ . Так как я пишу свой протокол и работаю с разными типами данных (отправляю их с МК не в символьном виде), разбиваю строку на части, к примеру: b’\xb1′ , b\xaa\xab’ и b\xac\xad\xae\xaf’ , то есть на однобайтовый int, двухбайтовый int и четырёхбайтовый int, с чем проблем не возникает. Главная задача — преобразовать эти байтовые последовательности в исходные числа. Однобайтовый int вполне получается преобразовать так:

In [64]: line = b'\t\xaa\xab\xac\xad\xae\xaf' In [65]: line [0] Out[65]: 9 In [72]: a = line [0] In [73]: a Out[73]: 9 In [74]: a += 1 In [75]: a Out[75]: 10 

Но вот метод преобразования в число двух и более бай мне неведом. В результате поиска больше запутался. И так, вопрос: как имея в исходных данных байтовые строки вида b\xaa\xab’ и b\xac\xad\xae\xaf’ привести их к целочисленному типу данных?

Отслеживать
52.2k 11 11 золотых знаков 109 109 серебряных знаков 312 312 бронзовых знаков
задан 24 ноя 2016 в 13:21
Алексей Симаков Алексей Симаков
141 3 3 серебряных знака 13 13 бронзовых знаков
какая версия pythonа?
24 ноя 2016 в 13:48
Spyder, Python 3.5
24 ноя 2016 в 13:52

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Чтобы конвертировать байты в целое число в Питоне 3 в независимости от числа байт:

>>> int.from_bytes(b'\xb1', 'big') 177 >>> int.from_bytes(b'\xaa\xab', 'big') 43691 >>> int.from_bytes(b'\xac\xad\xae\xaf', 'big') 2897063599 >>> int.from_bytes(b'\xac\xad\xae\xaf', 'big', signed=True) -1397903697 >>> int.from_bytes(b'\xac\xad\xae\xaf', 'little', signed=True) -1347506772 >>> int.from_bytes(b'\xac\xad\xae\xaf', 'little') 2947460524 

Если много однотипных данных, можно array.array , numpy.array использовать для экономии памяти и быстроты работы векторных операций.

Перевести числа в байты

Author24 — интернет-сервис помощи студентам

Как байты перевести в изображение?
Как байты перевести в изображение?

Килобайты перевести в байты
всем привет! как в делфи из килобайтов перевести в байты? если возможно еще и в биты

Перевести байты в ASCII в Qlineedit
Подскажите, вывожу в qlineedit определенный байт из файла и нужно что бы он отобразился в кодировке.

Как перевести байты в текст
Подскажите как переконвертировать байты из одного файла в текст с сохранением в другом файле

Перевести байты в биты и килобайты
Дана величина А, выражающая обьем информации в байтах. Перевести А в биты и килобайты

3553 / 2156 / 568
Регистрация: 02.09.2015
Сообщений: 5,441

ЦитатаСообщение от BlackLightHack Посмотреть сообщение

Откуда тут взялся F ?
Регистрация: 15.10.2020
Сообщений: 134
F= нет числа
3553 / 2156 / 568
Регистрация: 02.09.2015
Сообщений: 5,441

1 2 3 4
from struct import pack result = pack("i", 1234567) print(result)

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как перевести hex в байты?
Прежде, чем начнёте строчить ответ, почитайте описание. Я имею строку 0x01 и мне надо, чтобы она.

Как перевести файл в байты и наоборот?
Как перевести файл в байты и наоборот? Файлом может быть картинка или что-то другое. Также и строку.

Как перевести байты в формат картинки?
У меня с потока заполняется буфер. Мне с него нужно собрать картинку, чтобы потом ее вставить в.

Как перевести в строку все байты сразу?
у меня есть не много, не мало 3531 штук байтов такого вида 123,213,34,342,324 , их все надо.

Перевести величину в мегабайтах в биты/байты/килобайты/гигабайты
Дана емкость винчестера V в мегабайтах. Написать программу, которая бы по введенному номеру.

Как правильно перевести ключ и вектор в байты Aes
Всем здрасте. Прошу прощения если такая тема уже была, но я толком ответа не нашел. Такой вопрос: у.

Или воспользуйтесь поиском по форуму:

Байты (bytes и bytearray)

Python 3 логотип

Байтовые строки в Python — что это такое и с чем это едят? Байтовые строки очень похожи на обычные строки, но с некоторыми отличиями. Попробуем выяснить, с какими.

Что такое байты? Байт — минимальная единица хранения и обработки цифровой информации. Последовательность байт представляет собой какую-либо информацию (текст, картинку, мелодию. ).

Создаём байтовую строку:

   
   Что делать с байтами? Хотя байтовые строки поддерживают практически все строковые методы, с ними мало что нужно делать. Обычно их надо записать в файл / прочесть из файла и преобразовать во что-либо другое (конечно, если очень хочется, то можно и распечатать). Для преобразования в строку используется метод decode:
 Bytearray в python - массив байт. От типа bytes отличается только тем, что является изменяемым. Про него, в общем-то, больше рассказать нечего.

Для вставки кода на Python в комментарий заключайте его в теги

Конвертация между байтами и строками#

Избежать работы с байтами нельзя. Например, при работе с сетью или файловой системой, чаще всего, результат возвращается в байтах.

Соответственно, надо знать, как выполнять преобразование байтов в строку и наоборот. Для этого и нужна кодировка.

Кодировку можно представлять как ключ шифрования, который указывает:

  • как «зашифровать» строку в байты (str -> bytes). Используется метод encode (похож на encrypt)
  • как «расшифровать» байты в строку (bytes -> str). Используется метод decode (похож на decrypt)

Эта аналогия позволяет понять, что преобразования строка-байты и байты-строка должны использовать одинаковую кодировку.

encode, decode#

Для преобразования строки в байты используется метод encode:

In [1]: hi = 'привет' In [2]: hi.encode('utf-8') Out[2]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [3]: hi_bytes = hi.encode('utf-8') 

Чтобы получить строку из байт, используется метод decode:

In [4]: hi_bytes Out[4]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [5]: hi_bytes.decode('utf-8') Out[5]: 'привет' 

str.encode, bytes.decode#

Метод encode есть также в классе str (как и другие методы работы со строками):

In [6]: hi Out[6]: 'привет' In [7]: str.encode(hi, encoding='utf-8') Out[7]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' 

А метод decode есть у класса bytes (как и другие методы):

In [8]: hi_bytes Out[8]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [9]: bytes.decode(hi_bytes, encoding='utf-8') Out[9]: 'привет' 

В этих методах кодировка может указываться как ключевой аргумент (примеры выше) или как позиционный:

In [10]: hi_bytes Out[10]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [11]: bytes.decode(hi_bytes, 'utf-8') Out[11]: 'привет' 

Как работать с Юникодом и байтами#

Есть очень простое правило, придерживаясь которого, можно избежать, как минимум, части проблем. Оно называется «Юникод-сэндвич»:

  • байты, которые программа считывает, надо как можно раньше преобразовать в Юникод (строку)
  • внутри программы работать с Юникод
  • Юникод надо преобразовать в байты как можно позже, перед передачей

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *