Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    4

    C++ lettura e separazione di una stringa

    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

  2. #2
    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:
    codice:
    stringa += strlen("S11300F0") - 1;
    Poi estrai il valore esadecimale (se ogni numero esadecimale è solo di due cifre):
    codice:
    #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.


  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    4
    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...

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

    grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Puoi usare la funzione strtoul ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    4
    Originariamente inviato da oregon
    Puoi usare la funzione strtoul ...
    ehm. e come funziona?

  6. #6

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    4
    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?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    codice:
    	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;
    	}
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.