PDA

Visualizza la versione completa : C++ lettura e separazione di una stringa


Drigan
14-10-2008, 23:36
Salve a tutti, ho un problema, devo fare un programma che legga e scomponga da un file di testo delle stringhe scritte in questo modo:

S11300F080808080808080808080808080808080FC

dove ho capito che:
"S11300F0" il nome o l'indirizzo della riga

i vari "80" sono valori esadecimali, nel caso 80 vale uno 0 decimale, 8A vale 10 e 7F vale -1 ecc..

"FC" tipo la chiusura della stringa

il mio problema che a me serve poter convertire gli 80 in decimale per poi essere scritti in una matrice di interi,modificati e riscritti nel file in esadecimale, ma non so come leggere solo 2 caratteri per volta dalla stringa, dato che non ha separatori

un ringraziamento a chi sa aiutarmi :D

menphisx
15-10-2008, 01:09
Per scomporre la stringa in sottostringhe utilizzi strtok; oppure
strstr per accedere alle occorrenze di "S11300F0".
Se S11300F0 l'inizio di ogni stringa; allora cominci a leggere da:


stringa += strlen("S11300F0") - 1;


Poi estrai il valore esadecimale (se ogni numero esadecimale solo di due cifre):


#define gethex(ch) ((ch) - (isdigit((ch)) ? '0' : ('A' + 10)))

in hexvalue[256];
int i = 0;

while(*stringa){

hexvalue[i++] = gethex(*stringa) << 4 + gethex((*stringa + 1));
stringa += 2;

}


Non so' se ho dato l'idea.

:ciauz:

Drigan
15-10-2008, 11:06
purtroppo ogni riga inizia diversamente con l'ordine:

.
.
S11301C0
S11301D0
S11301E0
S11301F0
S1130200
S1130210
S1130220
.
.
per essendo la lunghezza sempre uguale penso vada bene usare lo strlen.
non ho capito come funziona strstr... :stordita:

per quanto riguarda l'esadecimale puoi spiegarmi il codice che mi hai scritto perch mi poco chiaro

grazie :D

oregon
15-10-2008, 12:19
Puoi usare la funzione strtoul ...

Drigan
16-10-2008, 18:34
Originariamente inviato da oregon
Puoi usare la funzione strtoul ...
ehm. e come funziona? :D

mondobimbi
16-10-2008, 19:36
http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul.html

Drigan
16-10-2008, 20:49
ma anche con strtoul io riesco a dargli un separatore solo con un char predefinito no?
se ho una stringa scritta: S11301D088898A8B8C808175787B8E8D7A56808015
come faccio a fargli leggere separatamente 88 89 8A 8B 8C 80 81 75 78 .... 7A 56 80 ?

avendo cifre che spaziano da 50 a 8F non ho caratteri costantemente presenti..

non c' una formula per cui legga 2 caratteri per volta?

oregon
16-10-2008, 21:17
char s[100], *p;
unsigned long v;
strcpy(s, "S11300F0AA808080808080808080808080808080FC");

p=s+8;
while(*p)
{
char t=*(p+2); *(p+2)=0;

v = strtoul(p, NULL, 16);

printf("%d\n", v);

*(p+2)=t; p+=2;
}

Loading