@Urbansamurai

Как в Python сконвертировать 24 битный integer в little-endian bytes?

Есть значение аудио сэмпла в формате int 24 bit, которое надо перевести в little-endian последовательность из 3х байт (строка из 3 символов).

Хочу сделать функцию, которая делала бы универсальное преобразование, независимо от битности. А пока что получается, что если число слишком маленькое, то на выходе может получится 1, или 2 байта – вместо 3х, и в WAV пишутся неверные данные. Пробовал struct – не работает с 24 битами. Версия Python 2.7.

Буду признателен за любую помощь.
  • Вопрос задан
  • 1074 просмотра
Решения вопроса 2
@deliro
(Любое положительное целое, не превышающее 2**24 - 1).to_bytes(3, 'little')

>>> (7777).to_bytes(3, 'little')
b'a\x1e\x00'
Ответ написан
@Urbansamurai Автор вопроса
Нашел аналог функции to_bytes для раннего Питона:

def to_bytes(n, length, endianess='big'):
    h = '%x' % n
    s = ('0'*(len(h) % 2) + h).zfill(length*2).decode('hex')
    return s if endianess == 'big' else s[::-1]


Работает!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы