Найти - Пользователи
Полная версия: преобразовать строку байт в строку символов
Начало » Python для новичков » преобразовать строку байт в строку символов
1 2
zmej
Здравствуйте!
Подскажите пожалуйста, если приходит строка символов в виде цифр (АНСИИ), как заставить питон виодить их ввиде строки букв а не строки цифр.
Пробовал разные str() и codecs, но все они не понимают, что это не просто набор байт а это готовые символы и переводят все равно в строку цифр.
Может я чего не досмотрел, уж извините за глупый вопрос
alexbadaloff
Пример кода и входных данных?
zmej
>>> data = 0x6162 # должно было бы соответствовать символам ‘ab’
>>> print str(data) # пробую преобразовать в строку ‘ab’
24930 # не получается преобразовать, в смысле оно наверное преобразовывает но в ‘24930’
>>>
zmej
правда читал Безли, что функция print итак лобое что надо выводить преобразовывает в строку.
пробовал также:
>>> import codecs
>>> data = codecs.lookup('ASCII')
>>> data.decode(6162)
>>> data.decode('6162')
(u'6162', 4)
>>>
py.user.next
zmej
преобразовать строку байт в строку символов
это не строка байт, а просто число
хочешь преобразовать - дели по модулю 0x100, чтобы составить кортеж чисел

>>> n = 0x6162
>>> t = (n // 0x100, n % 0x100)
>>> t
(97, 98)
>>> bytes(t)
b'ab'
>>> bytes(t).decode('ascii')
'ab'
>>>
bw
Таким способом `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
Даа.., я так и знал что все приидется делать вручную
но, почему то у меня ваш пример дал совсем другой результат:
>>> n = 0x6262
>>> t = (n // 0x100, n % 0x100)
>>> t
(98, 98)
>>> bytes(t)
'(98, 98)'
>>> bytes(t).decode('ascii')
u'(98, 98)'
>>>
(у меня питон 2.75)
zmej
Даа, спасибо помогли мне!
Попробуй найди в книге “s.pack(v1, v2, …) - Упаковывает значения в строку байтов” и догадайся что это то что нужно
bw
Что касается арифметики и `chr`, `ord`, `join`, то эти вещи существует в любом языке (в том или ином виде), а вот про специфику вроде `map` или `struct` не зная не догодаешься (ну собственно есть батарейки и документация, просто берёшь, без цели, и смотришь всё подряд, такой способ обучения работает). Так что задача была решаема (пусть и не самым красивым способом) и без знания специфичных для Python артефактов, оправдываться бесполезно :-).

Что за s.pack(v1, v2…? Где такое написано?

..bw
zmej
Способ то работает, но толоко если как говорят “в хвост и в гриву” не прижымают и есть немного времени, тогда можно и почитать.
“Python
подробный справочник”
Четвертое издание
Дэвид Бизли
2010 год

Спасибо Вам большое
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB