Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    12

    [C] stringa caratteri esadecimali

    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

  2. #2
    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):
    codice:
    //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;
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117
    Per numeri esadecimali più piccoli (entro i range dei tipi long int e long long int) puoi usare le funzioni strtol o strtoll.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    12
    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? )

    P.S.:Grazie mille delle risposte

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    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.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    12
    Chiedo scusa...provvedo

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