@wlastas

Как избавится от потери точности при ReadProcessMemory для float под c#?

Изначально данные в памяти приложения имеют 6 знаков после точки (судя по Cheat engine), но после того, как я их считываю в моей c# программе (стандартным методом через DllImport или же через ProcessMemoryUtilities.Net), они систематически округляются до 3-5 знаков, что мне абсолютно не подходит - данные нужны для поиска в памяти по корректным hex сигнатурам . Подскажите, чем и как читать без потерь - желательно под с#
[DllImport("kernel32.dll")]
        public static extern bool ReadProcessMemory(int hProcess,   Int64 lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 3
freeExec
@freeExec
Участник OpenStreetMap
У вас проблема не с чтением float, а его отображением. Можете его так же hex-ом показывать.
Ответ написан
Комментировать
@wlastas Автор вопроса
Да у меня они изначально в хекс стрингах передавались - и я периодически не мог макросом найти нужный офсет по маске, хотя точно знал, что данные в памяти есть.
Я вот прямо сейчас смотрю на float в режиме отладки в VS2019 сразу после чтения из памяти. Я даже отказался от готовых структур типа Vector3 от System.Numerics.Vectors для чистоты экскремента
var x = mem.ReadM<float>(mem.AddressOfProcess + 0x32AF350);
5114.13037 вместо 5114.130371
var y = mem.ReadM<float>(mem.AddressOfProcess + 0x32AF350+4);
5027.174 вместо 5027.173828
Ответ написан
Комментировать
@cicatrix
было бы большой ошибкой думать
float - 32 бита в памяти.
885px-Float_example.svg.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы