Суммировать два байта в Python / Micropython - PullRequest
0 голосов
/ 12 мая 2019

Я бы хотел суммировать два байта в Python, Micropython как можно проще

Я.работает над кодом для университета.Он просто должен отправить данные по адресу, смещенному по «маске», например.

 addrs = b'\x10'
 mask = b'\x01'
 finaladdrs = addrs + mask #should be b'\x11'
 machine.send(finaladdrs, somevalue)

Я уже пытался конвертировать в int, но он не работает должным образом.Преобразование в строку требует большой обработки.

Ответы [ 3 ]

1 голос
/ 12 мая 2019

Элементами байтовой строки являются целые числа:

>>> addrs = b'\x10'
>>> mask = b'\x01'
>>> addrs[0] + mask[0]
17

Обратно в байты:

>>> bytes([addrs[0] + mask[0]])
b'\x11'

Это может быть удобно для перебора байтовых данных, таких как генерация контрольной суммы:

>>> data = bytes([1,2,3,4,5])
>>> data
b'\x01\x02\x03\x04\x05'
>>> data += bytes([sum(data) & 0xFF]) # bytes data must be 0-255, hence mask
>>> data
b'\x01\x02\x03\x04\x05\x0f'

Чтобы ограничить преобразования из целочисленных списков в байты и наоборот, вы можете использовать изменяемый байтовый массив:

>>> addrs = bytearray(b'\x10')
>>> mask = b'\x01'
>>> addrs[0] += mask[0]
>>> addrs
bytearray(b'\x11')
0 голосов
/ 12 мая 2019

, если вы можете назначить addrs и mask для начала с 0b вместо b'\x', вот решение:

addrs = 0b10  
mask = 0b01 
finaladdrs = bin(addrs + mask)
print(finaladdrs)

вывод:

0b11
0 голосов
/ 12 мая 2019

Вы можете использовать ord и chr для преобразования

Код:

addrs = b'\x10'
mask = b'\x01'

finaladdrs = bytes(chr(ord(addrs) + ord(mask)), encoding='utf-8')

Выход:

b'\x11'
...