PDA

Visualizza la versione completa : [C] stringa caratteri esadecimali


MrHahn
11-09-2010, 20:36
Ciao a tutti!
Ho bisogno di una mano...
Ho una stringa di caratteri del tipo "3b6dac3d700ff6d7765946ef5f327992ab2e" e vorrei fare in modo di recuperare il valore esadecimale contenuto nella stringa. Mi spiego meglio...non voglio fare la conversione in esadecimale ma voglio recuperare il valore 0x3b6dac3d700ff6d7765946ef5f327992ab2e. Come posso fare?

Grazie in anticipo ;)

MItaly
12-09-2010, 02:35
Di certo dati di quel genere non li puoi mettere in una variabile numerica, sono decisamente troppo grandi. Per copiarli in generale ad una qualche locazione di memoria puoi usare una roba del genere (adattato da questo mio codice (http://code.google.com/p/irfanpaint/source/browse/trunk/irfanpaint/INISection.cpp#127)):


//Convert a hexadecimal string to its corresponding byte sequence; returns the number of bytes written
int HexToByte(const char * HexString, void * Out, size_t MaxOut)
{
unsigned char * castedOut=(unsigned char *)Out;
size_t hslength=strlen(HexString);
//Length check
if(hslength>MaxOut*2)
return -1;
if(hslength%2!=0)
return -2;
//Convert the string
const char * readPtr=HexString.c_str();
for(unsigned char * writePtr=castedOut;
writePtr<castedOut+hslength/2;
writePtr++,readPtr+=2)
{
int ret=getByte(readPtr);
if(ret<0)
return -3;
*writePtr=ret;
}
return hslength/2;
}

//Returns a byte from a pair of hexadecimal digits
int getByte(const char * str)
{
unsigned char ret=0;
char ch;
for(int i=0;i<2;i++)
{
ch=toupper(str[i]);
if(ch>='0' && ch<='9')
ret|=(ch-'0')<<((1-i)<<2);
else if(ch>='A' && ch<='F')
ret|=(ch-'A'+10)<<((1-i)<<2);
else
return -1;
}
return ret;
}

Cell
12-09-2010, 12:31
Per numeri esadecimali pi¨ piccoli (entro i range dei tipi long int e long long int) puoi usare le funzioni strtol o strtoll.

MrHahn
12-09-2010, 19:13
Ok, questa cosa l'ho risolta...ora mi sorge un altro problema...
Sto cercando su internet un modo per fare l'md5 di una stringa di caratteri...ho trovato alcune risorse ma il problema Ŕ che o sono terribilmente complesse o sono limitate e mi permettono di calcolare l'hash md5 solo di stringhe molto semplici.
Io ho la necessitÓ di calcolare l'md5 di stringhe contenenti anche i caratteri NULL, FS &co...
C'Ŕ un modo semplice e funzionale per ottenere questo risultato? (Non voglio niente dalla vita, eh? :D )

P.S.:Grazie mille delle risposte

alka
13-09-2010, 23:48
Originariamente inviato da MrHahn
Io ho la necessitÓ di calcolare l'md5 di stringhe contenenti anche i caratteri NULL, FS &co...


Per ogni domanda nuova, apri una discussione separata, come indicato nel Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

MrHahn
15-09-2010, 13:14
Chiedo scusa...provvedo :)

Loading