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

[Guida] C/C++ Conversione INT->FLOAT (puntatori)
(Questo messaggio è stato modificato l'ultima volta il: 10/06/2012, 22:51 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
versione con Union->

[Per vedere i link devi REGISTRARTI.]


Ciao!
nel cercare di hackerare qualche gioco usando un debugger, ad esempio Olly può capitare di imbattersi in cose come questa:

MOV EAX,42C80000

Ma che razza di numero è quello?
Se lo convertiamo con la calcolatrice da hex a decimale otteniamo : 1120403456

Torna la domanda... ma che razza di numero è? e cosa se ne fa il gioco di un numero cosi?

La risposta è semplice, NON è un numero decimale, è un FLOAT!

Già, perchè il numero float occupa 4 bytes, quindi può essere usato tranquillamente come qualsiasi numero decimale DWORD caricandolo nei soliti registri (basta usarlo nella maniera giusta).

Ma se volessimo convertire quel numero e capire quanto vale in float?
Ci sono dei programmini che lo fanno, ma visto che siamo nel topic del C/C++ vediamo come farlo con un programmino.

Prima vediamo quello che farebbe "intuitivamente" un programmatore con poca esperienza (ci ono cascato pure io eheh )

    C++ Programming
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. int i= 0x42C80000;
  7. float f = (float)i;
  8.  
  9. printf("%f",f);
  10. system("pause");
  11. }



Ovvero dichiariamo la variabile i come intero (decimale) e la inizializziamo a quel valore, poi gli diciamo che la vogliamo float usando un "cast" che la cambia di tipo.
Peccato che il risultato non è quello che vogliamo, infatti il risultato è questo:

1120403456.000000

Che del resto ha senso, è la stessa cosa che succede quando con la calcolatrice convertiamo quel numero da esadecimale a decimale.

Ma ora vediamo qual è il sistema giusto per vedere in float quanto vale quel numero:

    C++ Programming
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. int i= 0x42C80000;
  7. float *f = (float*)&i;
  8.  
  9. printf("%f",*f);
  10. system("pause");
  11. }



Qui abbiamo usato i puntatori.
Dichiariamo la variabile i come integer come prima e lo inizializziamo.
Questa volta però f lo diciariamo come PUNTATORE AD UN FLOAT, e non come float.
E a cosa lo inizializziamo? Essendo un puntatore, dobbiamo dargli un indirizzo quindi usiamo la sintassi:

&i;

che vuol dire "indirizzo di i"

Però siccome i è un integer, la forma &i ci darà un puntatore ad integer, quindi anche stavolta usiamo il casting, e scriviamo (float*) che vuol dire "convertilo in puntatore a float)

Ci resta solo un ultimo accorgimento, nel stampare a video il valore.
Infatti non possiamo stampare il VALORE di f! perchè è un PUNTATORE e non un float.
Allora dobbiamo stampare IL VALORE PUNTATO DA F e per farlo si fa cosi:

printf("%f",*f);

Notate il

*f

che appunto vuol dire "il valore puntato da f"

Il risultato è questo:

100.000000

Che è esattamente quello che ci serviva,
0x42C80000 int = 100.0 float


alla prossima
ciao
Digger


digger
25/07/2011, 11:41
#1
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
Ma te durante la giornata lavori o ti metti a passar tempo davanti al pc?? Asd Asd



25/07/2011, 13:45
#2
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
lavoro lavoro, ma ci sono cose che faccio che richiedono un bel po' di tempo diciamo "per i fatti loro" per cui posso dedicare qualche minuto a fare altro e mi rilasso un po' Smile


digger
25/07/2011, 14:47
#3
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(25/07/2011, 14:47)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

lavoro lavoro, ma ci sono cose che faccio che richiedono un bel po' di tempo diciamo "per i fatti loro" per cui posso dedicare qualche minuto a fare altro e mi rilasso un po' Smile

Ho sempre avuto questa curiosità...che lavoro fai?? Blush

25/07/2011, 17:54
#4
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
Fa il presentatore di "gira la ruota" =|

25/07/2011, 18:01
#5
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 25/07/2011, 18:10 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
(25/07/2011, 18:01)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Fa il presentatore di "gira la ruota" =|

poi pensavo di essere io quello delle battute tristi Asd





digger
25/07/2011, 18:10
#6
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
LOL! eh vabbè, mi hai contagiato cmq che lavoro fai?

25/07/2011, 20:36
#7
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(25/07/2011, 18:01)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Fa il presentatore di "gira la ruota" =|

Admin plsss aggiungi il pulsante -1 ti pregoooooooo
E se possibile ancbe solo per 15 secondi il pulsante -100, lo clicco una sola volta su Luxor Asd

25/07/2011, 21:13
#8
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
(25/07/2011, 21:13)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(25/07/2011, 18:01)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Fa il presentatore di "gira la ruota" =|

Admin plsss aggiungi il pulsante -1 ti pregoooooooo
E se possibile ancbe solo per 15 secondi il pulsante -100, lo clicco una sola volta su Luxor Asd


hahahahahahahahaha

25/07/2011, 21:37
#9
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
il mio lavoro resterà un segreto che morirà con me Asd



digger
25/07/2011, 22:08
#10
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(25/07/2011, 22:08)digger Ha scritto:

[Per vedere i link devi REGISTRARTI.]

il mio lavoro resterà un segreto che morirà con me Asd

Allora dovrà restare segreto a lungo Asd
Lunga vita al nostro adorato Digger Blush

25/07/2011, 22:30
#11
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
(25/07/2011, 22:30)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Allora dovrà restare segreto a lungo Asd
Lunga vita al nostro adorato Digger Blush

Non credo proprio... se non mi dice il suo lavoro..... mi faccio un bel criceto per colazione :cool::cool::cool:

25/07/2011, 22:34
#12
Cerca

WarRock Hacks Coder
Messaggi: 940
Discussioni: 47
Registrato: 03-2011
Mix: 0
(25/07/2011, 22:34)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(25/07/2011, 22:30)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Allora dovrà restare segreto a lungo Asd
Lunga vita al nostro adorato Digger Blush

Non credo proprio... se non mi dice il suo lavoro..... mi faccio un bel criceto per colazione :cool::cool::cool:

Chiamiamo il WWF

25/07/2011, 22:34
#13
Cerca
(Questo messaggio è stato modificato l'ultima volta il: 25/07/2011, 22:36 da Patoffo.)

Iscritto
Messaggi: 2,216
Discussioni: 102
Registrato: 03-2011
Mix: 0
(25/07/2011, 22:34)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(25/07/2011, 22:34)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(25/07/2011, 22:30)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Allora dovrà restare segreto a lungo Asd
Lunga vita al nostro adorato Digger Blush

Non credo proprio... se non mi dice il suo lavoro..... mi faccio un bel criceto per colazione :cool::cool::cool:

Chiamiamo il WWF

Asd Asd Asd Asd Asd Asd Asd Asd Asd Asd Asd Asd Asd

25/07/2011, 22:35
#14
Cerca

Iscritto
Messaggi: 891
Discussioni: 58
Registrato: 03-2011
Mix: 0
(25/07/2011, 22:34)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(25/07/2011, 22:34)Luxor Ha scritto:

[Per vedere i link devi REGISTRARTI.]

(25/07/2011, 22:30)Skyline@69 Ha scritto:

[Per vedere i link devi REGISTRARTI.]

Allora dovrà restare segreto a lungo Asd
Lunga vita al nostro adorato Digger Blush

Non credo proprio... se non mi dice il suo lavoro..... mi faccio un bel criceto per colazione :cool::cool::cool:

Chiamiamo il WWF

Quello me lo faccio per pranzo :cool::cool::cool:




25/07/2011, 22:40
#15
Cerca


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Dubbio float Cyanstack 4 1,790 20/11/2013, 12:58
Ultimo messaggio: Cyanstack
  [Guida] Il C++ CH.05: i puntatori digger 9 3,224 06/02/2013, 23:55
Ultimo messaggio: Pocciox
  [Guida] Conversione float<->int (UNION) digger 9 2,560 23/06/2012, 15:02
Ultimo messaggio: Marchrius



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