PDA

Visualizza la versione completa : [C++] Conversione esadecimale decimale da FILE


Meltronix
22-05-2008, 14:33
Salve a tutti apro subito con un problema che mi attanaglia la mente e soprattutto lo spirito :cry:

Veniamo al punto..

Ho un file contenente una serie di cifre esadecimali che dovrei convertire in cifre decimali, ho una notevole difficoltà a far acettare a delle variabili intere i valori esadecimali da file, ho quindi pensato a passarle anzichè da file ad una stringa, stessa cosa il cast con valori esadecimali non riesce... avete qualche idea??? bye bye

oregon
22-05-2008, 14:41
Ma il file di cui parli di che tipo e' ?

E' un file di testo (.txt) con i dati scritti in formato leggibile, esempio

A021 AA09

o è un file eseguibile (.exe) o un file dati (.dat, .bin) in cui i dati sono in binario ?

Meltronix
22-05-2008, 14:48
è un file txt... i valori esadecimali hanno max 3 cifre

oregon
22-05-2008, 15:08
Cioe' un file di testo con un valore per riga ... esempio cosi'

320
1A
A90
7B
C22

Meltronix
22-05-2008, 15:13
22 caratteri per riga e m non mi ricordo quanti per colonna.. eccolo qui

53 65 20 72 69 65 74 63 69 20 61 20 6C 65 67 67 65 72 6D 69 20 76
75 6F 6C 20 64 69 72 65 20 63 68 65 20 73 6F 6E 6F 20 72 69 75 73
63 69 74 6F 20 61 20 73 75 70 65 72 61 72 65 20 69 20 73 69 73 74
65 6D 69 20 64 69 20 73 69 63 75 72 65 7A 7A 61 20 64 65 6C 6C 61
20 42 69 6F 41 63 6D 65 6E 52 61 2C 20 73 6F 6E 6F 20 69 6C 20 44
6F 74 74 6F 72 20 52 61 6D 73 65 73 2C 20 67 72 61 7A 69 65 20 61
6C 6C 61 20 63 6F 6C 6C 61 62 6F 72 61 7A 69 6F 6E 65 20 63 6F 6E
20 61 6C 63 75 6E 69 20 76 65 63 63 68 69 20 65 20 66 69 64 61 74
69 20 61 6D 69 63 69 20 72 69 75 73 63 69 72 F2 20 61 64 20 69 6E
76 69 61 6D 74 69 20 75 6C 74 65 72 69 6F 72 69 20 65 20 73 65 67
72 65 74 69 73 73 69 6D 65 20 69 6E 66 6F 72 6D 61 7A 69 6F 6E 69
2E 20 4E 6F 20 64 69 72 65 20 61 20 6E 65 73 73 75 6E 6F 20 64 69
20 71 75 65 73 74 69 20 6D 65 73 73 61 67 67 G9 2C 20 73 70 65 72
6F 20 63 6F 6C 6F 20 64 69 20 72 69 75 73 63 69 72 65 20 61 64 20
69 6E 76 69 61 72 76 65 6E 65 20 61 6C 74 72 69 2E 2E 2E 2E

oregon
22-05-2008, 15:16
Beh ... per la lettura del file penso che tu non abbia problemi ...

Per convertire il valore a partire da una stringa, ad esempio, puoi scrivere

int x;
char *s = "53";

x = strtol(s, NULL, 16);

Naturalmente la stringa s e' un esempio ... tu la otterrai da file ...

MItaly
22-05-2008, 15:24
Supponendo che il tuo stream di input si chiami is:


int intero1, intero2, intero3;
//...
//Imposta la base 16 come base di lettura dei numeri
is.setf(ios::hex,ios::basefield);
is>>intero1>>intero2>>intero3;
//Se dopo ti serve leggere numeri in base 10 ti basta fare così:
is.setf(ios::dec,ios::basefield);
.

Meltronix
22-05-2008, 15:24
Non conoscevo queste funzioni grazie 1000

@Mitaly, in quel modo i valori possono essere ritrasformati in intero?

MItaly
22-05-2008, 16:04
Non capisco cosa intendi... nel modo che ti ho proposto dici allo stream che i numeri sono scritti in esadecimale, per cui lo stream, leggendoli, li legge come numeri esadecimali e li memorizza normalmente nelle variabili intere, che poi potrai usare normalmente. Non c'è nulla da ritrasformare, sono già interi.

Meltronix
22-05-2008, 20:06
volevo dire decimali.. comunque grazie 1000 problema risolto e programma funzionante

Loading