Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 06.07.2018
Сообщений: 4

Перевод строкового hex в числовой hex

27.10.2020, 18:28. Показов 5497. Ответов 5

Студворк — интернет-сервис помощи студентам
У меня имеется переменная target_ptr:
Python
1
target_ptr= "0x13FFE1000"
Ее мне необходимо переместить в переменную target_ptr_addr таким вот образом:
Python
1
target_ptr_addr = ctypes.c_ulonglong(target_ptr)
Переменная target_ptr - всегда на входе будет иметь строковый тип, в котором будет находится hex число, которое я использую для поиска адреса.
И за такое я получаю закономерную ошибку:
Code
1
TypeError: an integer is required (got type str)
Как мне можно обойти эту проблему? Ведь если просто задать переменную как ниже, то проблем не будет и все будет работать
Python
1
2
target_ptr == 0x13FFE1000 #Хочу получать
target_ptr == "0x13FFE1000" #Получаю
Однако у меня пока нет способа получать переменную target_ptr в числовом формате, я всегда буду вытаскивать str тип из программы, мне просто необходимо перевести str в int с сохранением hex структуры, а именно ниже на отдельном примере:
Python
1
2
3
4
5
6
7
8
target = "0x13FFE1000"
target_ptr = "{:x}".format(int(target,16))
target_ptr2 = int(target,16)
target_ptr3 = hex(int(target,16))
#Ожидаю получить int 0x13FFE1000
#1 получаю str "0x13FFE1000"
#2 получаю int 5368582144
#3 получаю str "0x13FFE1000"
Как мне возможно сделать из hex str числовой hex

Я совсем недавно начал все это изучать и сейчас столкнулся с такой вот проблемой, прошу помочь, гугл не спасает

Полный код, если нужно, для понимания сути:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import time
from ctypes import *
from ctypes.wintypes import *
from subprocess import check_output
 
last_time = time.time()
OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle
 
PROCESS_ALL_ACCESS = 0x1F0FFF
PROCESS_VM_READ = 0x0010
process_name = "DarkSoulsIII.exe"
def get_pid():
    line = check_output('tasklist /fi "Imagename eq DarkSoulsIII.exe"').split()
    return int(line[14])
pid = get_pid()
 
target_ptr_addr = 0x13FFE1000
target_ptr_addr = ctypes.c_ulonglong(target_ptr_addr)
 
bufferSize = 32
target_ptr = ctypes.create_string_buffer(bufferSize)
bytesRead = c_ulonglong(bufferSize)
processHandle = OpenProcess(PROCESS_VM_READ, False, pid)
 
if ReadProcessMemory(processHandle, target_ptr_addr, target_ptr, bufferSize, byref(bytesRead)):
    target_ptr = str(hex(target_ptr.raw[5]))+str(hex(target_ptr.raw[4])).replace('0x', '')+str(hex(target_ptr.raw[3])).replace('0x', '')+str(hex(target_ptr.raw[2])).replace('0x', '')+str(hex(target_ptr.raw[1])).replace('0x', '')+str(hex(target_ptr.raw[0])).replace('0x', '')
print("target_ptr =", target_ptr)
 
print("Time: {}".format(time.time() - last_time))
CloseHandle(processHandle)
С помощью этого кода я получаю переменную target_ptr = "0x7ff44cb5e390", которая хранит в себе адрес для следующего запроса, но адрес этот в строковом типе, а мне нужен int в 16-ричной системе счисления, а именно hex вида.

Возможно если есть какие-то библиотеки, с помощью которых можно прогуливаться по памяти приложений и делать смещения по offset-ам, как это я хочу реализовать, то пожалуйста напишите мне их.

Вообще если вдруг так же нужна информация, зачем я копаюсь в памяти игры, то отвечу сразу:
Мне это необходимо для получения из нее переменных(не для читерства) для нейронной сети.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2020, 18:28
Ответы с готовыми решениями:

Перевод из RGB формата в HEX Python
Подскажите, пожалуйста, как можно преобразовать следующие данные... Вот есть код, который получает +- следующий результат ...

Задача 3: перевод числа записанное в HEX с учетом знака в BIN
3) Напишите программу, которая переводит число (возможно, отрицательное), записанное в шестнадцатеричной системе счисления, в двоичную...

Задача 4: перевод числа записанное в HEX с учетом знака в DEC
4) Напишите программу, которая переводит число (возможно, отрицательное), записанное в шестнадцатеричной системе, в десятичную систему. ...

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
27.10.2020, 18:44
Лучший ответ Сообщение было отмечено Djokey049 как решение

Решение

Цитата Сообщение от Djokey049 Посмотреть сообщение
а мне нужен int в 16-ричной системе счисления, а именно hex вида.
- тебе нужен int.

Python
1
2
3
4
5
6
7
8
9
def h2i(h):
    hd="0123456789ABCDEF"
    acc=0
    for a in h[2:]:
        k=hd.find(a.upper())
        acc=acc*16+k
    return acc    
        
print(h2i("0xff"))
1
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,752
27.10.2020, 18:49
Лучший ответ Сообщение было отмечено Djokey049 как решение

Решение

Catstail, можно же так:
Python
1
print(int('0xff', 16))
2
1 / 1 / 0
Регистрация: 06.07.2018
Сообщений: 4
27.10.2020, 18:54  [ТС]
Я был слеп, пока ты не написал про то что мне нужен int, спасибо, действительно int как адрес тоже подходит и работает точно так же)
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
27.10.2020, 19:01
Лучший ответ Сообщение было отмечено Djokey049 как решение

Решение

Цитата Сообщение от Djokey049 Посмотреть сообщение
int как адрес тоже подходит
Вообще-то он всегда и был интом.
int это тип данных. hex это всего лишь представление числа в определенном формате.
А hex-литерал (без скобок) 0x13FFE1000 транслируется питоном в обычный int десятичного вида.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,684
Записей в блоге: 14
27.10.2020, 19:15
u235, я подозревал, что есть стандартная функция (не может не быть!), но... лень было лезть в справочник!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2020, 19:15
Помогаю со студенческими работами здесь

Если HEX одного файла заменить на HEX другого, то изменится ли файл и будет ли работоспособным?
Привет, если два файла a.exe(калькулятор) и b.exe(выводит строку "Hello World") Если открыть файл b.exe в HEX-редакторе и подменить его...

Прошивка микроконтроллера Hex файлом или Hex загрузчик
Доброго дня, Вообщем имеется программатор USB ASP v.2.0, Хочу написать свою программу которая будет загружать из кода C# через этот...

Как преобразовать hex в ascii (HEX редактор)
Написал: String ^in; openFileDialog1->Filter = "hex Files|*.hex"; openFileDialog1->Title = "Select a hex File"; ...

Вычислить формулу (hex) Rsh 7h и (hex) And 7Fh
Мне надо всёвремя считать, например, такое 11F0 Rsh 7 = 23 11F0 And 7F = 70 Чтобы на выходе получать 2370, ну, наверно в...

Перевести строку char hex в hex массив
Мужики имею такую задачу есть переменная типа char котора содержит в себе строку hex. hexchar="2D33D8" Есть вот такой массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru