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

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

27.10.2020, 18:28. Показов 5607. Ответов 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
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 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
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
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
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru