zmej
Авг. 6, 2013 10:07:51
Здравствуйте!
Подскажите пожалуйста, если приходит строка символов в виде цифр (АНСИИ), как заставить питон виодить их ввиде строки букв а не строки цифр.
Пробовал разные str() и codecs, но все они не понимают, что это не просто набор байт а это готовые символы и переводят все равно в строку цифр.
Может я чего не досмотрел, уж извините за глупый вопрос
alexbadaloff
Авг. 6, 2013 10:37:25
Пример кода и входных данных?
zmej
Авг. 6, 2013 10:54:31
>>> data = 0x6162 # должно было бы соответствовать символам ‘ab’
>>> print str(data) # пробую преобразовать в строку ‘ab’
24930 # не получается преобразовать, в смысле оно наверное преобразовывает но в ‘24930’
>>>
zmej
Авг. 6, 2013 11:03:00
правда читал Безли, что функция print итак лобое что надо выводить преобразовывает в строку.
пробовал также:
>>> import codecs
>>> data = codecs.lookup('ASCII')
>>> data.decode(6162)
>>> data.decode('6162')
(u'6162', 4)
>>>
py.user.next
Авг. 6, 2013 11:10:42
zmej
преобразовать строку байт в строку символов
это не строка байт, а просто число
хочешь преобразовать - дели по модулю 0x100, чтобы составить кортеж чисел
>>> n = 0x6162
>>> t = (n // 0x100, n % 0x100)
>>> t
(97, 98)
>>> bytes(t)
b'ab'
>>> bytes(t).decode('ascii')
'ab'
>>>
Таким способом `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
zmej
Авг. 6, 2013 11:38:22
Даа.., я так и знал что все приидется делать вручную

но, почему то у меня ваш пример дал совсем другой результат:
>>> 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 12:18:07
Даа, спасибо помогли мне!
Попробуй найди в книге “s.pack(v1, v2, …) - Упаковывает значения в строку байтов” и догадайся что это то что нужно
Что касается арифметики и `chr`, `ord`, `join`, то эти вещи существует в любом языке (в том или ином виде), а вот про специфику вроде `map` или `struct` не зная не догодаешься (ну собственно есть батарейки и документация, просто берёшь, без цели, и смотришь всё подряд, такой способ обучения работает). Так что задача была решаема (пусть и не самым красивым способом) и без знания специфичных для Python артефактов, оправдываться бесполезно :-).
Что за s.pack(v1, v2…? Где такое написано?
..bw
zmej
Авг. 6, 2013 12:54:14
Способ то работает, но толоко если как говорят “в хвост и в гриву” не прижымают и есть немного времени, тогда можно и почитать.
“Python
подробный справочник”
Четвертое издание
Дэвид Бизли
2010 год
Спасибо Вам большое