J'essaye de convertir un caractère [] dans ASCII en caractère [] en hexadécimal.
Quelque chose comme ça:
bonjour -> 68656C6C6F
Je veux lire au clavier la chaîne. Il doit comporter 16 caractères.
Ceci est mon code maintenant. Je ne sais pas comment faire cette opération. J'ai lu sur strol mais je pense que cela convertit simplement str nombre en 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 car je lis mieux que fgets mais je peux le changer si nécessaire.
En rapport avec cela, j'essaie de convertir la chaîne lue dans un tableau uint8_t, en joignant chaque 2 octets sur un pour obtenir le nombre hexadécimal.
J'ai cette fonction que j'utilise beaucoup dans Arduino, donc je pense que cela devrait fonctionner sans problème dans un programme C normal.
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, j'obtiens une erreur de segmentation.
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 d'entrer dans le tableau ce dont j'avais besoin, mais cela a échoué ...
#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;
}
remplacez ceci
printf("%c",Word[i]);
par
printf("%02X",Word[i]);
Utilisez le paramètre de format %02X
:
printf("%02X",Word[i]);
Plus d'informations peuvent être trouvées ici: http://www.cplusplus.com/reference/cstdio/printf/
void atoh(char *ascii_ptr, char *hex_ptr,int len)
{
int i;
for(i = 0; i < (len / 2); i++)
{
*(hex_ptr+i) = (*(ascii_ptr+(2*i)) <= '9') ? ((*(ascii_ptr+(2*i)) - '0') * 16 ) : (((*(ascii_ptr+(2*i)) - 'A') + 10) << 4);
*(hex_ptr+i) |= (*(ascii_ptr+(2*i)+1) <= '9') ? (*(ascii_ptr+(2*i)+1) - '0') : (*(ascii_ptr+(2*i)+1) - 'A' + 10);
}
}