Próbuję dowiedzieć się, jak modyfikować lokalizacje pamięci za pomocą C++, a kiedy mam problemy z MineSweeper, zauważyłem, że gdy wartość zegara w pamięci wynosiła 1101004800, to było 20 sekund do gry. Cyfry 1101529088 odpowiadają 21 sekundom w grze. Czy ktoś może mi wyjaśnić, jak przekonwertować te 10-cyfrowe długie liczby na 10-zasadnicze?W jaki sposób cyfry 1101004800 odpowiadają numerowi 20?
7
A
Odpowiedz
4
1101004800
dziesiętny to 0x41A00000
hex, który jest reprezentacją IEEE-754 20.0
. 1101529088
dziesiętny to 0x41A80000
hex, który jest reprezentacją IEEE-754 21.0
.
8
Używają pływaków do reprezentowania licznika czasu. Oto program, który konwertuje liczby całkowite do pływaków:
#include <stdio.h>
int main() {
int n = 1101004800;
int n2 = 1101529088;
printf("%f\n", *((float*)&n));
printf("%f\n", *((float*)&n2));
return 0;
}
wyjściowa:
20.000000
21.000000
+0
Świetnie, wielkie dzięki! – Fred
1101529088 - 1101004800 = 524288 = 2^19. Nie mam pojęcia, co to znaczy. – anon
Czy to może być kleszcze od pewnej epoki? Po prostu zgadywanie, że 41A00000 wydaje się dziwnym adresem wskaźnika. –