Python 24 бит Stream не дает правильного значения?

Я конвертирую 3 буквы в их двоичную нотацию ASCII, а затем увеличиваю первую букву на 16 мест, вторую букву на 8 мест, а последняя остается там, где она есть, так что, когда 24-битный поток сконфигурирован, первый 8-битный поток места представляет собой первую букву, а следующая 8 - среднюю букву, а последние - последнюю букву. Вот мой код:

# create a block for the word 'Ozy'
bk1 = (ord('O')<<16) + (ord('z')<<8) + (ord('y'))
# Now take off the encryption for the block
cbk1 = ((chr(bk1>>16)) + (chr(bk1>>8)) + (chr(bk1&0xFF)))
# output of cbk1 is: 'O\u4f7ay'

Так вот, где проблема, первая буква была расшифрована как O , последняя буква была правильной, а также y , но по какой-то причине она не будет права вещь для z . Что не так?

2

3 ответы

This happens because you forgot to filter-out the bits from the first letter!
Indeed the ASCII value for the 2nd letter, 'z', shows as '7a', but as you see it has '4f' (i.e. the ASCII for 'O'), in front of it. Try something like:
cbk1 = ((chr(bk1>>16)) + (chr((bk1 & 0xFF00)>>8) ) + (chr(bk1&0xFF)))

Как указано в ответе warvariuc , структурный модуль Python помогает управлять упаковкой и распаковкой записей различной формы, но на данном этапе изучения Python и систем кодирования в целом вы, вероятно, захотите придерживаться явных манипуляций с битами.

1
добавлено

Looks like you're missing an & 0xff:

cbk1 = ((chr(bk1>>16)) + (chr((bk1>>8) & 0xff)) + (chr(bk1&0xFF)))

дает правильный ответ. При повторном возврате вам нужно также замаскировать верхние биты, потому что бит, установленный первым символом (сдвинутым на 16 бит), все равно будет там.

1
добавлено
>>> import struct
>>> a = chr(0) + 'Ozy' # make the data 4 byte long
>>> x = struct.unpack('>I', a)[0] # convert byte data into unsigned integer of 4 bytes
>>> hex(x) # it should be 3 bytes long, because first byte was 0x00
'0x4f7a79'
>>> a = struct.pack('>I', x)[1:] # pack the integer back to bytes and throw away the left most 0x00 byte
>>> a
'Ozy'
>>> 
0
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community