PDA

Visualizza la versione completa : Problema con C


GavriloP
16-02-2004, 12:15
Qualcuno sa dirmi cosa fanno queste righe di comando?

Prende un file in input,dichiara uno short di 2 byte e lo riempe prima con il primo carattere letto dal fgetc e poi...?
Perch il secondo fgetc viene moltiplicato per 256?
Su internet ho visto una tesina di un ragazzo che applicava questo codice ad una immagine e c'era anche dei pezzi dove non solo veniva moltiplicato per 256 ma successivamente per 65634 e 16000000... che tra l'altro sono i colori delle bitmap a 256,65k e 16M di colori

unsigned short duebyte;
duebyte=fgetc(file_in);
duebyte+=fgetc(file_in)*256;
return(duebyte);

Vi prego HELP ME!!!

LeleFT
16-02-2004, 12:28
Se tu hai un numero di n cifre, in un qualsiasi sistema di numerazione posizionale, per avere il suo valore devi prendere ciascun simbolo e moltiplicarlo per la base elevata alla sua (posizione - 1):


25 = 2 * 10^1 + 5 * 10^0 (ovviamente in base 10)

Come noto, ciascun simbolo ha un differente valore a seconda della posizione che occupa nella rappresentazione del numero.

Probabilmente lui intende visualizzare il valore corrispondente alla "stringa" di caratteri che ci sono dentro al file... con una piccola parentesi: i dati, nella maggior parte dei calcolatori, vengono salvati in LITTLE ENDIAN ossia capovolti. Questo significa che la lettura del valore deve essere effettuata al contrario: 25 verrebbe rappresentato come 52, di conseguenza le posizioni non vanno a scalare da sinistra verso destra, ma viceversa.

Ma qual' il sistema di numerazione utilizzato nei file? E' la base 255 (chiamata, comunemente, ASCII): il carattere 'A', per esempio, ha valore 65, il 'B' ha valore 66, uno spazio ha valore 32, ecc...

Per questo, quel programma prende i primi 2 byte (che andrebbero letti al contrario) e valorizza ciascuna cifra al suo valore posizionale.

Esempietto:


Stringa: AB

essendo in Little Endian dovremmo leggerla al contrario: BA

Questo un valore, in ASCII: B * 256^1 + A * 256^0
Questo il relativo valore:
66 * 256^1 + 65 * 256^0 =
66 * 256 + 65 * 1 =
16896 + 65 = 16961


Spero di essere stato quanto pi chiaro possibile ed esauriente. Il discorso sui sistemi di numerazione posizionali andrebbe, probabilmente, approfondito, ma non questa la sede (il topic) adatta.

Ciao. :ciauz:

GavriloP
16-02-2004, 14:29
Grazie mille!!! Non potevi essere pi chiaro di cos... Te ne sono veramente grato!!!

Loading