Conversion de chaîne Hex en ASCII

J’ai une chaîne hexagonale et je souhaite la convertir en chaîne ascii en C.

vous devez prendre 2 caractères hexadécimaux en même temps … puis calculez la valeur int et effectuez ensuite la conversion de caractères comme …

char d = (char)intValue;

faites cela pour chaque 2chars dans la chaîne hexagonale

cela fonctionne si les caractères de chaîne ne sont que 0-9A-F:

 #include  #include  int hex_to_int(char c){ int first = c / 16 - 3; int second = c % 16; int result = first*10 + second; if(result > 9) result--; return result; } int hex_to_ascii(char c, char d){ int high = hex_to_int(c) * 16; int low = hex_to_int(d); return high+low; } int main(){ const char* st = "48656C6C6F3B"; int length = strlen(st); int i; char buf = 0; for(i = 0; i < length; i++){ if(i % 2 != 0){ printf("%c", hex_to_ascii(buf, st[i])); }else{ buf = st[i]; } } } 

Peu de caractères comme l’alphabet io n’ont pu être convertis en caractères ASCII respectifs. comme dans la chaîne “6631653064316f30723161” correspond à fedora . mais ça donne fedra

Il suffit de modifier un peu la fonction hex_to_int () et cela fonctionnera pour tous les caractères. fonction modifiée est

 int hex_to_int(char c) { if (c >= 97) c = c - 32; int first = c / 16 - 3; int second = c % 16; int result = first * 10 + second; if (result > 9) result--; return result; } 

Maintenant, essayez, cela fonctionnera pour tous les personnages.

strtol() est votre ami ici. Le troisième paramètre est la base numérique que vous convertissez.

Exemple:

 #include  /* printf */ #include  /* strtol */ int main(int argc, char **argv) { long int num = 0; long int num2 =0; char * str. = "f00d"; char * str2 = "0xf00d"; num = strtol( str, 0, 16); //converts hexadecimal ssortingng to long. num2 = strtol( str2, 0, 0); //conversion depends on the ssortingng passed in, 0x... Is hex, 0... Is octal and everything else is decimal. printf( "%ld\n", num); printf( "%ld\n", num); }