Форум сайта python.su
0
Это сделали забугорные корифеи! Я пытаюсь вставить промежуточную контрольную печать только.
Переделывать тип буфера нельзя. Как вы видите, после return ожидается строка для последующей
обработки. Что уж есть!
Скорее всего для конвертации нужно использовать code() - decode() , которые мне не известны.
Офлайн
0
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
Офлайн
25
c_long - это как-бы не один байт совсем
Офлайн
857
>>> s = 'abcd' >>> ''.join(map('{:02x}'.format, map(ord, s))) '61626364' >>>
Офлайн
0
s0rg, насчёт c_long - согласен. Просто мысль использовать объединение пришла уже в конце,
и я на безразмерное поле c_char_p, долго не думая, с запасом дал другое поле c_long.
Вижу, вроде идёт - на этом и остановился. И как было в эксперименте, так не шлифуя
скопировал сюда.
py.user.next, ваше предложение тоже интересно. Если бы вы ещё прокомментировали
действие этих двух map() ?, а заодно - зачем метод join() применён к пробелу?
Офлайн
857
открой интерпретатор и набери
help(map) help(''.join)
kafон вызывается не у пробела, а у пустой строки
зачем метод join() применён к пробелу?
Офлайн
0
Да, посмотрел в Справке и проверил - это символ разделителя, если есть. А у меня только что-ли требуется ноль перед символом “ : ” в {…} , (у меня версия 2.6).
Офлайн
857
kafэто да, раньше в версии 3.0 нужно было обязательно ставить номер поля, потом они сделали возможность пустого номера поля, а потом перенесли это и во второй питон, поэтому в версии 2.7 можно не ставить
А у меня только что-ли требуется ноль перед символом
kafтам многого нет, например, множественных включений
у меня версия 2.6
>>> {i for i in 'abc'} set(['a', 'c', 'b']) >>>
Отредактировано py.user.next (Март 21, 2013 19:11:34)
Офлайн
0
py.user.next - спасибо!
Хотел добавить вам благодарность, нажал на ваш зелёный ‘+’ , но
дальше не смог разобраться, пришлось отменить.
Офлайн