versione con puntatori->
[Per vedere i link devi REGISTRARTI.]
Ciao a tutti,
miniguida inutile che non servirà a nessuno, tranne che a me quando un giorno mi servirà, non mi ricorderò come cavolo avevo fatto, allora cercherò in internet e uscirà questo mio post su hackmix e ringrazierò di averlo postato
Forse non tutti lo sanno, ma abitualmente oggigiorno (?) un float è contenuto nello stesso numero di bytes di un un int (anche detto DWORD) ovvero 4 bytes.
Quindi può capitare spesso hackerando, o giocando con CheatEngine o con MHS di trovarsi di fronte a locazioni di memoria che hanno valori tipo questo:
Citazione:42c80000
li per li sembrerebbe uno strano numero senza molto senso, potrebbe anche venire il dubbio che si tratti di un puntatore, ma poi analizzando bene l'uso che ne viene fatto, si scopre che è un float!
Ma quanto cavolo vale quel float in modo piu comprensibile ad un essere umano?
Alcuni programmi hanno dei tools di conversione, beh ve lo dico io, vale
100.0f
Esatto, 100 float.
Beh può capitare a volte che si abbia bisogno da codice di gestire i float come interi o gli interi come float, come facciamo a sapere di che numero parliamo?
Tempo fa avevo usato i puntatori, dichiaro una variabile come puntatore a float, la inizializzo all'indirizzo di una variabile intero ed ecco che quando la dereferenzio ho fatto la conversione, vale anche l'inverso ovviamente.
Oggi però smanettando ho scopero un altro modo forse anche piu pratico, ovvero l'uso dell'UNION
Ebbene si, questo animale sconosciuto che quasi nessuno usa... ecco come fare:
C++ Programming
#include <iostream>
using namespace std;
int main()
{
union {
int intero;
float flottante;
};
flottante = 100.0f;
cout << hex << intero;
}
come funziona? semplice, l'union fa si che la variabile "intero" e "flottante" occupino di fatto lo stesso spazio di memoria, sono la stessa variabile diciamo cosi, però a cui possiamo accedere con 2 nomi diversi e usando 2 tipi diversi.
Cosi nel programma ho inizializzato quella memoria come "float" a 100 e poi l'ho letta come "int" ottenendo il valore visto prima ovvero 42c80000
"hex" serve solo a dire che voglio printare l'output in formato esadecimale
ciao
alla prossima guida inutile
Digger