Форум сайта python.su
0
Здравствуйте!
Подскажите пожалуйста, если приходит строка символов в виде цифр (АНСИИ), как заставить питон виодить их ввиде строки букв а не строки цифр.
Пробовал разные str() и codecs, но все они не понимают, что это не просто набор байт а это готовые символы и переводят все равно в строку цифр.
Может я чего не досмотрел, уж извините за глупый вопрос
Офлайн
16
Пример кода и входных данных?
Офлайн
0
>>> data = 0x6162 # должно было бы соответствовать символам ‘ab’
>>> print str(data) # пробую преобразовать в строку ‘ab’
24930 # не получается преобразовать, в смысле оно наверное преобразовывает но в ‘24930’
>>>
Офлайн
0
правда читал Безли, что функция print итак лобое что надо выводить преобразовывает в строку.
пробовал также:
>>> import codecs
>>> data = codecs.lookup('ASCII')
>>> data.decode(6162)
>>> data.decode('6162')
(u'6162', 4)
>>>
Офлайн
857
zmejэто не строка байт, а просто число
преобразовать строку байт в строку символов
>>> n = 0x6162 >>> t = (n // 0x100, n % 0x100) >>> t (97, 98) >>> bytes(t) b'ab' >>> bytes(t).decode('ascii') 'ab' >>>
Отредактировано py.user.next (Авг. 6, 2013 11:14:02)
Офлайн
20
Таким способом `bytes` только в Python 3 работает. Другой вариант:
>>> n = 0x6162 >>> assert n <= 0xffff, n >>> h, l = n >> 8, n & 0xff >>> struct.pack('BB', h, l) 'ab' >>> ''.join(map(chr, [h, l])) 'ab'
>>> struct.pack('>H', 0x6162) 'ab' >>> struct.pack('<H', 0x6162) 'ba'
Отредактировано bw (Авг. 6, 2013 11:35:23)
Офлайн
0
Даа.., я так и знал что все приидется делать вручную 
но, почему то у меня ваш пример дал совсем другой результат:
>>> n = 0x6262
>>> t = (n // 0x100, n % 0x100)
>>> t
(98, 98)
>>> bytes(t)
'(98, 98)'
>>> bytes(t).decode('ascii')
u'(98, 98)'
>>>
(у меня питон 2.75)
Отредактировано zmej (Авг. 6, 2013 11:54:08)
Офлайн
0
Даа, спасибо помогли мне!
Попробуй найди в книге “s.pack(v1, v2, …) - Упаковывает значения в строку байтов” и догадайся что это то что нужно
Офлайн
20
Что касается арифметики и `chr`, `ord`, `join`, то эти вещи существует в любом языке (в том или ином виде), а вот про специфику вроде `map` или `struct` не зная не догодаешься (ну собственно есть батарейки и документация, просто берёшь, без цели, и смотришь всё подряд, такой способ обучения работает). Так что задача была решаема (пусть и не самым красивым способом) и без знания специфичных для Python артефактов, оправдываться бесполезно :-).
Что за s.pack(v1, v2…? Где такое написано?
..bw
Офлайн
0
Способ то работает, но толоко если как говорят “в хвост и в гриву” не прижымают и есть немного времени, тогда можно и почитать.
“Python
подробный справочник”
Четвертое издание
Дэвид Бизли
2010 год
Спасибо Вам большое
Отредактировано zmej (Авг. 6, 2013 13:00:10)
Офлайн