Найти - Пользователи
Полная версия: Распечатать код
Начало » Python для новичков » Распечатать код
1 2
kaf
В переменную s формата str функция поместила некоторый код в виде 16-ричных
чисел (возможно, по два числа в байт). Как распечатать эту s в виде ‘0х…’ ?
Спасибо!
Loki
Не очень понятно что Вы имеете ввиду, но попробуйте примерно так:
s = hex(555)
with open('filname.txt', 'w') as file_for_print:
    file_for_print.write(s)
А потом можете открыть filname.txt и распечатать текст.
kaf
Спасибо, Loki!
Но у вас в s представлен чётко цифровой код, а у меня не совсем так.
Когда я print'ом распечатал в формате %s 1-й байт, то получил ‘j’ ,т.е.
цифры находятся по тетрадам. Этот результат даёт мне API - функция
ReadProcessMemory().
Мне не печать важна, а узнать значение что находится в байте. И вполне
достаточно вывода на консоль eclipse'a. Мне нужно 16-ричное представление
того, что находится в байте символьного буфера s , а ожидаю я получить
две цифры на байт.
s0rg
print '0x{:02X}'.format(10)
0x0A
В скобочках ‘{}’:
: - указания для форматирования
02 - два знака с дополнением 0, если знаков меньше
X -hex-представление
kaf
Спасибо! Но опять же с самого начала числовой вариант. Он идёт.
Мне нужно распечатать в 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
>>>
————————————————-

s0rg
kaf
Мне нужно распечатать в 16-ричном виде строковый буфер с
произвольным в нём кодом (от 00 до ff на байт). Конечно, достаточно
распечатать один байт - всё станет ясно. Для примера можно взять s = ‘j’.
Тогда объясните что именно вам нужно, так как для случая когда в буффере символ нужно использовать ord:
print '0x{:02X}'.format(ord('j'))
0x6A
kaf
Насколько я знаю, ord() это номер символа в таблеце ascii . Мне же не известно что
чужая программа затолкала в буфер s . Известно только что это камандный код. Вот его
16-ричное представление мне нужно! а не символьное! Из этого кода могут образоваться
и непечатаемые символы.
По другому говоря, мне нужно конвертировать символьное представление в бинарное.
Как это сделать на питоне - мне не известно!
s0rg
Если у вас есть бинарное представление ( а оно у вас именно бинарное, если вы говорите про ReadProcessMemory) то первый вариант, который я вам дал, это то что вам нужно и мне непонятны ваши телодвижения с символами. Если это не так, то потрудитесь описать задачу, что есть на входе и что нужно на выходе.

P.S. Забыл про встроенную функцию hex() - посмотрите на нее в том числе.
kaf
Функция ReadProcessMemory() читает непосредственно в read_buf = create_string_buffer() ,
затем идёт data += read_buf.raw , где выше определена data = “” .
затем идёт return data . Вот мне и нужно прчитать 1-й байт из этой data .
s0rg
kaf
read_buf = create_string_buffer() ,
затем идёт data += read_buf.raw , где выше определена data = “” .
Что за бред, как вы вообще такое умудрились сделать?
read_buf должен быть
read_buf = (c_ubyte * size)()
Где size - размер куска, который вы читаете. Почитайте докуметацию хоть, или примеры использования погуглите. Первый байт -
read_buf[0]
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