PDA

Visualizza la versione completa : C - caratteri in esadecimale


DarthSandr
21-02-2008, 09:32
Salve a tutti.
Ho un problema.
Devo convertire i caratteri di un file nel loro valore ASCII esadecimale.
Ad esempio la parola EUR dovra' essere convertita in 0x45 0x55 0x52 e salvare il tutto in un vettore di char.

Ho provato a fare nel seguente modo:

fscanf(input_file, "%x", &ch);
infoFile[indRowFile++] = ch;

ma non funziona! Nel vettore finale ho tutti 0x0E

Dove sbaglio?

Ciao e grazie a chi rispondera'!

Sandro

oregon
21-02-2008, 10:11
Beh ... non funziona perche' e' sbagliato ...

Intanto fai qualche precisazione ... cosa e'

infoFile

?

Un vettore di char?

In questo vettore dovrai memorizzare la stringa

0x45 0x55 0x52

?

Ma se scrivi indRowFile++ il puntatore si sposta di un solo carattere ogni valore esadecimale quando per ogni valore almeno usi (compreso lo spazio finale)

0xab

5 caratteri ...

DarthSandr
21-02-2008, 10:23
Ok, qualche info in piu'!

infoFile e' cosi' definito:

char infoFile[LUNG_CREDITO] = {(char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00};

e quello che vorrei fare e' come se volessi scrivere

infoFile[0] = (char)0x45;
infoFile[1] = (char)0x55;
infoFile[2] = (char)0x52;

ovviamente il tutto in maniera automatica leggendo i dati dal file!
Praticamente una volta letto un carattere (ad esempio 'E') vorrei caricare nel vettore la sua rappresentazione in esadecimale ovvero (char)0x45.

Spero di essere stato piu' chiaro!

Ciao e grazie

Sandro

oregon
21-02-2008, 10:33
Ah ... allora e' tutta un'altra storia ...

C'e' un equivoco di fondo ... l'esadecimale e' solamente un sistema di rappresentazione del dato, NON e' una proprietÓ insita nel dato ... Quindi, la lettura dal file avviene A PRESCINDERE dall'esadecimale ma dipende solamente dal TIPO di dato (il char nel tuo caso).

Solo dopo averlo letto, potrai visualizzarlo come vorrai, ma il dato sarÓ sempre quello.

In definitiva a te basta scrivere

infoFile[indRowFile++] = (char)fgetc(input_file);

per leggere correttamente il singolo carattere.

DarthSandr
21-02-2008, 11:44
perfetto!

Grazie mille!

Ciao
Sandro

Loading