Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2013 10:07:51

zmej
Зарегистрирован: 2013-07-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

Здравствуйте!
Подскажите пожалуйста, если приходит строка символов в виде цифр (АНСИИ), как заставить питон виодить их ввиде строки букв а не строки цифр.
Пробовал разные str() и codecs, но все они не понимают, что это не просто набор байт а это готовые символы и переводят все равно в строку цифр.
Может я чего не досмотрел, уж извините за глупый вопрос

Офлайн

#2 Авг. 6, 2013 10:37:25

alexbadaloff
От: Иваново
Зарегистрирован: 2013-04-11
Сообщения: 198
Репутация: +  16  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

Пример кода и входных данных?



————————–
Истина где-то рядом

Офлайн

#3 Авг. 6, 2013 10:54:31

zmej
Зарегистрирован: 2013-07-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

>>> data = 0x6162 # должно было бы соответствовать символам ‘ab’
>>> print str(data) # пробую преобразовать в строку ‘ab’
24930 # не получается преобразовать, в смысле оно наверное преобразовывает но в ‘24930’
>>>

Офлайн

#4 Авг. 6, 2013 11:03:00

zmej
Зарегистрирован: 2013-07-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

правда читал Безли, что функция print итак лобое что надо выводить преобразовывает в строку.
пробовал также:
>>> import codecs
>>> data = codecs.lookup('ASCII')
>>> data.decode(6162)
>>> data.decode('6162')
(u'6162', 4)
>>>

Офлайн

#5 Авг. 6, 2013 11:10:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

zmej
преобразовать строку байт в строку символов
это не строка байт, а просто число
хочешь преобразовать - дели по модулю 0x100, чтобы составить кортеж чисел

>>> 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)

Офлайн

#6 Авг. 6, 2013 11:30:07

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  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



Отредактировано bw (Авг. 6, 2013 11:35:23)

Офлайн

#7 Авг. 6, 2013 11:38:22

zmej
Зарегистрирован: 2013-07-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

Даа.., я так и знал что все приидется делать вручную
но, почему то у меня ваш пример дал совсем другой результат:
>>> 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)

Офлайн

#8 Авг. 6, 2013 12:18:07

zmej
Зарегистрирован: 2013-07-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

Даа, спасибо помогли мне!
Попробуй найди в книге “s.pack(v1, v2, …) - Упаковывает значения в строку байтов” и догадайся что это то что нужно

Офлайн

#9 Авг. 6, 2013 12:44:12

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

преобразовать строку байт в строку символов

Что касается арифметики и `chr`, `ord`, `join`, то эти вещи существует в любом языке (в том или ином виде), а вот про специфику вроде `map` или `struct` не зная не догодаешься (ну собственно есть батарейки и документация, просто берёшь, без цели, и смотришь всё подряд, такой способ обучения работает). Так что задача была решаема (пусть и не самым красивым способом) и без знания специфичных для Python артефактов, оправдываться бесполезно :-).

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

..bw



Офлайн

#10 Авг. 6, 2013 12:54:14

zmej
Зарегистрирован: 2013-07-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

преобразовать строку байт в строку символов

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

Спасибо Вам большое

Отредактировано zmej (Авг. 6, 2013 13:00:10)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version