Форум сайта python.su
0
В переменную s формата str функция поместила некоторый код в виде 16-ричных
чисел (возможно, по два числа в байт). Как распечатать эту s в виде ‘0х…’ ?
Спасибо!
Офлайн
4
Не очень понятно что Вы имеете ввиду, но попробуйте примерно так:
s = hex(555) with open('filname.txt', 'w') as file_for_print: file_for_print.write(s)
Офлайн
0
Спасибо, Loki!
Но у вас в s представлен чётко цифровой код, а у меня не совсем так.
Когда я print'ом распечатал в формате %s 1-й байт, то получил ‘j’ ,т.е.
цифры находятся по тетрадам. Этот результат даёт мне API - функция
ReadProcessMemory().
Мне не печать важна, а узнать значение что находится в байте. И вполне
достаточно вывода на консоль eclipse'a. Мне нужно 16-ричное представление
того, что находится в байте символьного буфера s , а ожидаю я получить
две цифры на байт.
Офлайн
25
print '0x{:02X}'.format(10)
Офлайн
0
Спасибо! Но опять же с самого начала числовой вариант. Он идёт.
Мне нужно распечатать в 16-ричном виде строковый буфер с
произвольным в нём кодом (от 00 до ff на байт). Конечно, достаточно
распечатать один байт - всё станет ясно. Для примера можно взять s = ‘j’.
Вот мои попытки с вашим s0rg предложением:
>>> print '0x{0:02x}'.format(10)
0x0a
======================================
>>> s = 'j'
>>> print '0x{0:02x}'.format(s)
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
print '0x{0:02x}'.format(s)
ValueError: Unknown conversion type x
>>>
>>> chr(0x6a)
'j'
>>>
>>> s = '0x6A'
>>> print '0x{0:02x}'.format(s)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print '0x{0:02x}'.format(s)
ValueError: Unknown conversion type x
>>> Офлайн
25
kafТогда объясните что именно вам нужно, так как для случая когда в буффере символ нужно использовать ord:
Мне нужно распечатать в 16-ричном виде строковый буфер с
произвольным в нём кодом (от 00 до ff на байт). Конечно, достаточно
распечатать один байт - всё станет ясно. Для примера можно взять s = ‘j’.
print '0x{:02X}'.format(ord('j'))
Офлайн
0
Насколько я знаю, ord() это номер символа в таблеце ascii . Мне же не известно что
чужая программа затолкала в буфер s . Известно только что это камандный код. Вот его
16-ричное представление мне нужно! а не символьное! Из этого кода могут образоваться
и непечатаемые символы.
По другому говоря, мне нужно конвертировать символьное представление в бинарное.
Как это сделать на питоне - мне не известно!
Офлайн
25
Если у вас есть бинарное представление ( а оно у вас именно бинарное, если вы говорите про ReadProcessMemory) то первый вариант, который я вам дал, это то что вам нужно и мне непонятны ваши телодвижения с символами. Если это не так, то потрудитесь описать задачу, что есть на входе и что нужно на выходе.
P.S. Забыл про встроенную функцию hex() - посмотрите на нее в том числе.
Отредактировано s0rg (Март 17, 2013 12:50:53)
Офлайн
0
Функция ReadProcessMemory() читает непосредственно в read_buf = create_string_buffer() ,
затем идёт data += read_buf.raw , где выше определена data = “” .
затем идёт return data . Вот мне и нужно прчитать 1-й байт из этой data .
Офлайн
25
kafЧто за бред, как вы вообще такое умудрились сделать?
read_buf = create_string_buffer() ,
затем идёт data += read_buf.raw , где выше определена data = “” .
read_buf = (c_ubyte * size)()
read_buf[0]
Отредактировано s0rg (Март 17, 2013 14:45:01)
Офлайн