1 / 1 / 0
Регистрация: 06.07.2018
Сообщений: 4

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

27.10.2020, 18:28. Показов 5508. Ответов 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru