2013-05-13 7 views
12

J'essaye de convertir un caractère [] en ASCII en caractère [] en hexadécimal.Convertir ascii char [] en caractère hexadécimal [] en C

Quelque chose comme ceci:

bonjour -> 68656C6C6F

Je veux lire par le clavier de la chaîne. Il doit comporter 16 caractères.

Ceci est mon code maintenant. Je ne sais pas comment faire cette opération. Je l'ai lu strol mais je pense que convertir simplement numéro str int ... hex

#include <stdio.h> 
main() 
{ 
    int i = 0; 
    char word[17]; 

    printf("Intro word:"); 

    fgets(word, 16, stdin); 
    word[16] = '\0'; 
    for(i = 0; i<16; i++){ 
     printf("%c",word[i]); 
    } 
} 

J'utilise fgets parce que je lis est mieux que fgets mais je peux le changer si nécessaire. En relation avec ceci, j'essaye de convertir la chaîne lue dans un tableau uint8_t, joignant chaque 2 octets en un pour obtenir le nombre hexadécimal.

J'ai cette fonction que j'utilise beaucoup dans arduino donc je pense que cela devrait fonctionner dans un programme C normal sans problèmes.

uint8_t* hex_decode(char *in, size_t len, uint8_t *out) 
{ 
    unsigned int i, t, hn, ln; 

    for (t = 0,i = 0; i < len; i+=2,++t) { 

      hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0'; 
      ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0'; 

      out[t] = (hn << 4) | ln; 
      printf("%s",out[t]); 
    } 
    return out; 

}

Mais, chaque fois que j'appelle cette fonction dans mon code, je reçois une erreur de segmentation.

L'ajout de ce code au code de la première réponse:

uint8_t* out; 
    hex_decode(key_DM, sizeof(out_key), out); 

J'ai essayé de passer tous les paramètres nécessaires et obtenir en dehors tableau ce que je dois, mais il échoue ...

+0

'uint8_t * out;' -> 'uint8_t * out = calloc (sizeof (out_key), sizeof (* out));' ou 'strlen (key_DM) + 1' au lieu de' sizeof (out_key) '. – BLUEPIXY

Répondre

10
#include <stdio.h> 
#include <string.h> 

int main(void){ 
    char word[17], outword[33];//17:16+1, 33:16*2+1 
    int i, len; 

    printf("Intro word:"); 
    fgets(word, sizeof(word), stdin); 
    len = strlen(word); 
    if(word[len-1]=='\n') 
     word[--len] = '\0'; 

    for(i = 0; i<len; i++){ 
     sprintf(outword+i*2, "%02X", word[i]); 
    } 
    printf("%s\n", outword); 
    return 0; 
} 
+0

J'imprime juste par exemple. Mais je veux enregistrer la chaîne dans une autre chaîne. Comment dois-je faire le casting? – Biribu

+1

@Biribu les résultats de ce programme stockés dans 'outword'. Le casting n'est pas nécessaire. – BLUEPIXY

+0

Je l'ai vu maintenant. Pardon. Je viens de voir le printf quand je lis. Ça fonctionne bien. Merci beaucoup. – Biribu

5

remplacer ce

printf("%c",word[i]); 

par

printf("%02X",word[i]); 
Questions connexes