Приведение long
к double
не даст вам желаемого результата.Приведение чисел преобразует числовое значение, оно не копирует биты.Вам нужно что-то вроде:
long pt = ptrace(PTRACE_PEEKDATA, ChildPid, addr, 0);
double result;
assert (sizeof(pt) == sizeof(result), "Oops, wrong word size!");
memcpy (&result, &pt, sizeof(result));
Чтобы получить float
, вам нужно знать, какую половину слова он занимает (обычно вы не должны использовать addr
, который не выровнен по отношению кграница слова).Таким образом вам нужно что-то вроде следующего:
long pt = ptrace(PTRACE_PEEKDATA, ChildPid, addr, 0);
float result;
assert (sizeof(pt) == 2*sizeof(result), "Oops, wrong word size!");
// either this (for the lower half of the word)
memcpy (&result, &pt, sizeof(result));
// or this (for the upper half of the word)
memcpy (&result, ((char*)&pt)+sizeof(result), sizeof(result));