Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    [C] hex di stringhe

    ciao, vorrei rendere in esadecimale una stringa.
    Esiste una funzione in C per effettuare la conversione ascii/hex e viceversa?

    grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] hex di stringhe

    Originariamente inviato da devil89
    vorrei rendere in esadecimale una stringa.
    Cioè? Non abbiamo (io o altri) la sfera di cristallo ....

    Forse data una stringa "ciao" vuoi ottenere la stringa "6369616F" (dove ad esempio 63 è il valore in hex del carattere 'c')??

    Comunque no, non c'è una funzione per fare cose del genere, te la devi fare tu (e ci sono svariate possibilità).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Una di queste soluzioni e' la sprintf o simili ... ma devi chiarire la richiesta ...

  4. #4
    Intendi data una stringa "F" ottenerne il valore 0xF ???

  5. #5
    io intendevo appunto...non credo fosse difficile da capire...se esiste una funzione C ansi che mi permetta di ottenere, dato una stringa di caratteri, la relativa rappresentazione esadecimale.

    comunque sembra che non esista tale funzione.
    Ho trovato questo, ma non riesco a compilarlo con Visual C++:
    codice:
    #define BYTES 7
    
    void ToHex(unsigned char *p, char *s)
    {
      int i;
      for(i=0; i<BYTES; i++)
        printf(s+i*2, 2, "%02X", *(p+i));
      *(s+i*2)=0;
    }
    
    int main(int argc, CHAR* argv[])
    {
      unsigned char b[] = {0x00, 0x12, 0x34, 0x56, 0xAA, 0x55, 0xFF};
      char *st;
    
      st=(char *)malloc(2*BYTES*sizeof(char)+1);
    	
      ToHex(b, st);
      printf("%s\n", st);
    
      free(st);
    
      return 0;
    }

  6. #6
    ho risolto. ho linkato il file header tchar.h

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E sei sicuro che faccia quello che ti serve ? E soprattutto, che funzioni ?

    P.S. Un file .h si include non si linka ...

  8. #8
    scusa per l'errore gergale
    ho un problema....non mi è chiaro come "lavora" la funzione.
    forse non è quello che serve a mè. la funzione toHex cosa converte?

    io vorrei, passare in input una stringa tipo "ciao" e avere di ritorno o stampato a video il valore in esadecimale.
    vi ringrazio dell'attenzione

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da devil89
    scusa per l'errore gergale
    Beh ... ti sembrera' un dettaglio, ma se parliamo di programmazione, non e' proprio una formalita' ...

    ho un problema....non mi è chiaro come "lavora" la funzione.
    forse non è quello che serve a mè. la funzione toHex cosa converte?
    Infatti ... non solo non fa quello che ti serve, ma e' pure sbagliata ...

    io vorrei, passare in input una stringa tipo "ciao" e avere di ritorno o stampato a video il valore in esadecimale.
    Ecco ... adesso sei stato piu' chiaro ... anche se non credevi fosse difficile capirti, ti confermo che la tua richiesta iniziale non era chiara e lasciava aperte diverse strade ...

    Comunque, ecco un esempio da cui prendere spunto ...

    codice:
    int main()
    {
    	char s[] = "Essere o non essere";
    	char x[100];
    
    	char *p=s, *d=x;
    	while(*p)
    	{
    		sprintf(d, "%02X", *p++);
    		d+=2;
    	}
    	*d=0;
    
    	printf("%s\n", x);
    
    	return 0;
    }

  10. #10
    grazie. giusto per vedere se ho capito come lavora la funzione..la commento:

    codice:
    int main()
    {
    	char s[] = "Essere o non essere";
    	char x[100];
    
    	char *p=s; // Assegna al puntatore l'indirizzo iniziale dell'area di memoria di s
            char *d=x; // Stessa cosa....
    	while(*p)
    	{
    		sprintf(d, "%02X", *p++); // Copia nell'array x, il valore hex di s[0]
    		d+=2; // vengono occupati 2 byte, quindi si sposta di 2 il puntatore nell'array x
    	}
    	*d=0;
    
    	printf("%s\n", x);
    
    	return 0;
    }
    a cosa serve azzerare il puntatore d?

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.