Benvenuto! Per postare e godere delle funzionalità del forum registrati, occorrono pochi secondi ed è gratis!

[Guida] Conversione float<->int (UNION)
(Questo messaggio è stato modificato l'ultima volta il: 10/06/2012, 22:52 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Reputazione:
106

Mix: 3,737
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 Happywide Asd

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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. union {
  7. int intero;
  8. float flottante;
  9. };
  10.  
  11. flottante = 100.0f;
  12. cout << hex << intero;
  13. }



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 Asd

Digger


digger
10/06/2012, 22:45
#1
Cerca


Messaggi in questa discussione
Conversione float<->int (UNION) - da digger - 10/06/2012, 22:45
[Nessun oggetto] - da NosOne1 - 10/06/2012, 23:15
[Nessun oggetto] - da digger - 10/06/2012, 23:17
[Nessun oggetto] - da NosOne1 - 10/06/2012, 23:21
[Nessun oggetto] - da digger - 11/06/2012, 0:39
[Nessun oggetto] - da Admin - 11/06/2012, 14:17
[Nessun oggetto] - da digger - 11/06/2012, 16:08
[Nessun oggetto] - da Marchrius - 23/06/2012, 13:06
[Nessun oggetto] - da digger - 23/06/2012, 13:42
[Nessun oggetto] - da Marchrius - 23/06/2012, 15:02

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Dubbio float Cyanstack 4 601 20/11/2013, 12:58
Ultimo messaggio: Cyanstack
  [Guida] C/C++ Conversione INT->FLOAT (puntatori) digger 18 3,003 26/07/2011, 13:57
Ultimo messaggio: Skyline@69
  [Guida] Perchè int o float ? digger 3 2,527 27/03/2011, 13:41
Ultimo messaggio: ZioPaperino



Utenti che stanno guardando questa discussione: 1 Ospite(i)