Получить половину каждого байта neibours в питоне - PullRequest
0 голосов
/ 18 октября 2019

У меня есть этот объект байтов:

test = b"\x05\x08\x06\x04\x01\x05" 

, и я хотел бы получить это от него, создавая байты на выходе с половинами двух соседних байтов:

result = b"\x50\x80\x60\x40\x10" 

1 Ответ

0 голосов
/ 18 октября 2019

Вы можете сделать это с небольшим количеством математики: вы можете получить последние четыре бита вашего байта с b % 16, а первые четыре с целочисленным делением на 16. Тогда вам просто нужно объединить обе части.

Обратите внимание, что вы получаете целые числа при индексации / итерации в байтовом объекте.

Итак:

test=b"\x05\x08\x06\x04\x01\x05" 
result=b"\x50\x80\x60\x40\x10"

out = bytes((test[i]%16)*16 + test[i+1]//16 for i in range(len(test)-1))
print((out))
# b'P\x80`@\x10'

(Поскольку некоторые значения соответствуют кодам ASCII печатных символов, эти символыздесь печатаются вместо \x.. представления)

...