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

[Guida] Perchè int o float ?
(Questo messaggio è stato modificato l'ultima volta il: 25/03/2011, 20:35 da digger.)

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
capita che nelle source delle hacks ci siano istruzioni come:

    C++ Programming
  1. *(int*)dwPlayerPtr+OFS_uno=valore;



e magari poco dopo

    C++ Programming
  1. *(float*)dwPlayerPtr+OFS_due=valore.decimali;



e qualcuno si chiede, ma perchè a volte int, a volte float (e a volte anche DWORD oppure long)?
non si può usare sempre int? sempre float? etc?

la risposta è :

int, long, DWORD sono (abbastanza) intercambiabili, nel senso che in C++ vengono sempre rappresentati con 4 bytes e il risultato sarà sempre lo stesso

per il float il discorso è COMPLETAMENTE DIVERSO
il float nonostante sia sempre 4 bytes viene rappresentato in memoria in modo completamente diverso quindi se mettiamo un valore intero in una memoria float facciamo casino, se mettiamo un valore float in una memoria che si aspetta un int facciamo casino!

il float viene utilizzato quando c'è bisogno di maggior precisione, facciamo qualche esempio

INT

1
2
3
4
etc

FLOAT

2.3654
10.43
0.003

quindi useremo int per numeri interi e float per numeri con decimali per una maggior precisione.
Se il programma è il nostro è facile scegliere il tipo giusto da usare.
Nel caso delle hacks è piu difficile, perchè il source non è il nostro e nemmeno ce l'abbiamo a disposizione.

Per sapere se dobbiamo mettere int (e gli altri) oppure float l'unico modo è vedere il codice asm del gioco da hackerare, mi spiace non conosco nessun altro modo Smile
nel senso che a seconda di come l'address viene usato capiremo se usare un intero oppure un float

oppure se non siamo capaci, ci fidiamo di come fanno gli altri nelle loro source, se funzionano, vuol dire che hanno usato il tipo giust Wink



p.s. prima che qualcuno me lo faccia notare, in un source si può anche mettere un float in un int o un int in una variabile float ma quello che succederà è che avverrà un casting di tipo e quindi è tutto lecito, nel senso che il compilatore (oppure runtime a seconda della situazione) si occuperà di fare la cosa giusta.
Quello a cui mi riferisco io è che di solito nella hack stiamo lavorando con dei puntatori, quindi se diciamo che quello è un puntatore ad un float (mentre dovrebbe essere un puntatore a int) non avverrà nessun casting! noi infileremo un valore float in una memoria che verrà letta come int e quindi il valore sarà sbagliato!

quando avrò tempo scriverò qualche pezzo di codice e qualche screenshot per far meglio capire il concetto, mi rendo conto che cosi non si capisce un gran che, ma fidatevi Happywide



digger
25/03/2011, 20:19
#1
Cerca

Dammi La Bamba Infame !
Messaggi: 1,395
Discussioni: 48
Registrato: 03-2011
Mix: 0
Bhe diciamo che tu........hai una soluzione a tutto

27/03/2011, 12:19
#2
Cerca

Il criceto mannaro
Messaggi: 3,536
Discussioni: 201
Registrato: 03-2011
Mix: 3,737
ahah esagerato, non è vero Smile


digger
27/03/2011, 13:28
#3
Cerca

ZioPaperino VIP
Messaggi: 2,350
Discussioni: 667
Registrato: 03-2011
Mix: 0
No è vero -.-

27/03/2011, 13:41
#4
Cerca


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Dubbio float Cyanstack 4 1,790 20/11/2013, 12:58
Ultimo messaggio: Cyanstack
  [Guida] Conversione float<->int (UNION) digger 9 2,558 23/06/2012, 15:02
Ultimo messaggio: Marchrius
  [Guida] C/C++ Conversione INT->FLOAT (puntatori) digger 18 5,548 26/07/2011, 13:57
Ultimo messaggio: Skyline@69



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