Найти - Пользователи
Полная версия: Распечатать код
Начало » Python для новичков » Распечатать код
1 2
kaf
Это сделали забугорные корифеи! Я пытаюсь вставить промежуточную контрольную печать только.
Переделывать тип буфера нельзя. Как вы видите, после return ожидается строка для последующей
обработки. Что уж есть!
Скорее всего для конвертации нужно использовать code() - decode() , которые мне не известны.
kaf
s0rg
Благодаря вашей активности пришлось поднапрячься - в результате я получил
два способа решения этой задачки. Первый - простой и ограниченный по возможностям,
второй - несколько сложнее, но универсальный и мощный.
В 1-м способе можно только распечатать в 16-ричном виде строковый буфер. я его сейчас
вовсю использую. Для целей контрольной печати - это то что надо!
Во 2-м методе используется объединение Union, в котором на байты накладываются
поля строкового и числового типа. Затем объект этого класса инициализируется одним
типом, а используется, если надо другой тип.
Вот и вся здача!
 >>> s = 'j'
>>> h = s.encode('hex')
>>> print "0x%s\n" % h
0x6a
===========================================
>>> from ctypes import *
>>> class str_h(Union): \
_fields_ = [("str1", c_char_p), ("num1", c_long)]
>>> ob1 = str_h(s)
>>> s1 = ob1.str1
>>> n1 = ob1.num1
>>> print "s1 = %s" % s1
s1 = j
>>> print "n1 = %ld" % n1
n1 = 10581588
>>> ord('j')
106
s0rg
c_long - это как-бы не один байт совсем
py.user.next
>>> s = 'abcd'
>>> ''.join(map('{:02x}'.format, map(ord, s)))
'61626364'
>>>
kaf
s0rg, насчёт c_long - согласен. Просто мысль использовать объединение пришла уже в конце,
и я на безразмерное поле c_char_p, долго не думая, с запасом дал другое поле c_long.
Вижу, вроде идёт - на этом и остановился. И как было в эксперименте, так не шлифуя
скопировал сюда.
py.user.next, ваше предложение тоже интересно. Если бы вы ещё прокомментировали
действие этих двух map() ?, а заодно - зачем метод join() применён к пробелу?
py.user.next
открой интерпретатор и набери
help(map)
help(''.join)

kaf
зачем метод join() применён к пробелу?
он вызывается не у пробела, а у пустой строки

чтобы понять, как работает строка, нужно читать её справа налево изнутри наружу
этот способ перевода работает в обеих версиях питона (в третьем нет кодировки hex)
kaf
Да, посмотрел в Справке и проверил - это символ разделителя, если есть. А у меня только что-ли требуется ноль перед символом “ : ” в {…} , (у меня версия 2.6).
py.user.next
kaf
А у меня только что-ли требуется ноль перед символом
это да, раньше в версии 3.0 нужно было обязательно ставить номер поля, потом они сделали возможность пустого номера поля, а потом перенесли это и во второй питон, поэтому в версии 2.7 можно не ставить

kaf
у меня версия 2.6
там многого нет, например, множественных включений
>>> {i for i in 'abc'}
set(['a', 'c', 'b'])
>>>
kaf
py.user.next - спасибо!
Хотел добавить вам благодарность, нажал на ваш зелёный ‘+’ , но
дальше не смог разобраться, пришлось отменить.
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