Hex to ascii string conversion

后端 未结 3 902
执念已碎
执念已碎 2020-12-09 11:29

i have an hex string and want it to be converted to ascii string in C. How can i accomplish this??

相关标签:
3条回答
  • 2020-12-09 11:46

    strtol() is your friend here. The third parameter is the numerical base that you are converting.

    Example:

    #include <stdio.h>      /* printf */
    #include <stdlib.h>     /* 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 string to long.
        num2 = strtol( str2, 0, 0); //conversion depends on the string passed in, 0x... Is hex, 0... Is octal and everything else is decimal.
    
        printf( "%ld\n", num);
        printf( "%ld\n", num);
    }
    
    0 讨论(0)
  • 2020-12-09 12:02

    you need to take 2 (hex) chars at the same time... then calculate the int value and after that make the char conversion like...

    char d = (char)intValue;

    do this for every 2chars in the hex string

    this works if the string chars are only 0-9A-F:

    #include <stdio.h>
    #include <string.h>
    
    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];
                    }
            }
    }
    
    0 讨论(0)
  • 2020-12-09 12:03

    Few characters like alphabets i-o couldn't be converted into respective ASCII chars . like in string '6631653064316f30723161' corresponds to fedora . but it gives fedra

    Just modify hex_to_int() function a little and it will work for all characters. modified function is

    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;
    }
    

    Now try it will work for all characters.

    0 讨论(0)
提交回复
热议问题