Преобразование шестнадцатеричной строки в ascii - PullRequest
12 голосов
/ 23 марта 2011

У меня есть шестнадцатеричная строка, и я хочу, чтобы она была преобразована в строку ascii в C. Как я могу это сделать ??

Ответы [ 3 ]

13 голосов
/ 23 марта 2011

вам нужно взять 2 (шестнадцатеричных) символа одновременно ... затем вычислить значение int и после этого сделайте преобразование символа как ...

char d = (char)intValue;

сделать это для каждых 2 символов в шестнадцатеричной строке

это работает, если строковые символы только 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];
                }
        }
}
2 голосов
/ 05 июля 2015

strtol() ваш друг здесь.Третий параметр - это числовая база, которую вы конвертируете.

Пример:

#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);
}
2 голосов
/ 12 марта 2012

Несколько символов, таких как алфавиты, не могут быть преобразованы в соответствующие символы ASCII.как в строке '6631653064316f30723161' соответствует fedora .но это дает fedra

Просто немного измените функцию hex_to_int () и она будет работать для всех символовмодифицированная функция

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

Теперь попробуйте, она будет работать для всех символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...