Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] Convertire byte in esadecimale

    Ciao a tutti,
    ho l'esigenza di memorizzare in una stringa il valore esadecimale di una sequenza di byte che leggo da un file binario.
    Per il momento ho scritto questo codice, ma qualcosa non va:
    codice:
    char* AsciiToHex(char* sAscii,int Lunghezza)
    {
    	char *StringaEsadecimale, *Hex;
    	int i;
    	
    	StringaEsadecimale=(char*)malloc(Lunghezza*2+1);
    	StringaEsadecimale[0]='\0';
    	Hex=(char*)malloc(sizeof(char)*3);
    	for(i=0;i<Lunghezza;i++)
    	{
    		itoa(sAscii[i],Hex,16);
    		strcat(StringaEsadecimale,Hex);
    	}
    	return StringaEsadecimale;
    }
    Il problema è che dopo aver effettuato la conversione "itoa", la variabile Hex non contiene solo i due caratteri esadecimali, ma contiene anche diverse "F".
    Per esempio se nel file ho un "1", mi aspetto il suo valore esadecimale "31", ma ottengo "FFFFFF31".
    Probabilmente mi manca qualche concetto di C++...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Come chiami la funzione ?

    Mostra il main con i dati che passi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Come chiami la funzione ?

    Mostra il main con i dati che passi ...
    eccolo...
    codice:
    Record=(char*)malloc(LenRecord-2);
    fread(Record,(LenRecord-2),1,fpi);
    TipoRecord=(char*)malloc(3);
    TipoRecordHex=(char*)malloc(7);
    TipoRecord[0]=Record[0];
    TipoRecord[1]=Record[1];
    TipoRecord[2]=Record[2];
    TipoRecordHex=AsciiToHex(TipoRecord,3);
    TipoRecord contiene n byte letti da file, a me interessano i primi 3.
    Li converto in una stringa esadecimale e li scarico nella var TipoRecordHex
    tranne i numerici sono tutte variabili di tipo char*

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quelle F sono le estensioni del segno quando converti un valore con segno in esadecimale.

    Se non vuoi considerare il segno dei tuoi dati, allora devi indicarlo esplicitamente

    itoa((unsigned char)sAscii[i], Hex, 16);

    Se tratti unicamente dati senza segno (binari puri), allora ti conviene lavorare con i puntatori di tipo

    unsigned char *

    in tutte le parti del tuo programma
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Quelle F sono le estensioni del segno quando converti un valore con segno in esadecimale.

    Se non vuoi considerare il segno dei tuoi dati, allora devi indicarlo esplicitamente

    itoa((unsigned char)sAscii[i], Hex, 16);

    Se tratti unicamente dati senza segno (binari puri), allora ti conviene lavorare con i puntatori di tipo

    unsigned char *

    in tutte le parti del tuo programma
    Ora è ok, grazie mille!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.