将十六进制值(ASCII)转换为文本

时间:2016-10-28 15:29:16

标签: c ascii

我正在尝试将 ASCII 十六进制值(0x61或61)转换为它的char值(61 = a等等)没有 atoiscanfstrcat

我正在将getchar()保存到临时变量,然后我将第一个(6)保存在数组中,然后将第二个(1)保存在数组中,现在我想取这两个并将它们转换为ASCII值。

68656c6c6f0d0a = hello

void asd(char fde)
{
    char asmg[3];
    asmg[0] = "0x";
    asmg[1] = "6";
    asmg[2] = "1";
    printf("%c", asmg);
}

我希望它可以打印" a",但它不起作用。

类似的东西,但这不起作用。我需要将asmg [0],[1],[2]放到一个char中,然后它应该可以工作。 谢谢:))

3 个答案:

答案 0 :(得分:1)

不确定您要做什么,但这可能会有所帮助。

int main(int argc, char **argv) 
{
    int hex[6] = {0x68, 0x65, 0x6C, 0x6C, 0x6F};
    int i = 0;

    for(i = 0; i <6; i++)
    {
        printf("%c", hex[i]);
    }
    printf("\n");
}

答案 1 :(得分:1)

您可以使用此函数将Hexastring转换为ASCII

void hexToAscii(unsigned char *buf, int size, char *str) {
int i;

for (i = 0; i < size; ++i) {
    sprintf(str + (i * 2), "%02X", buf[i]);
 }
}

不要将字符串的最后一个元素设置为null。

答案 2 :(得分:1)

#include <stdio.h>

int main(void){
    char hex[] = "68656c6c6f0d0a";
    char text[(sizeof(hex)+1)/2];

    int i = 0, j = 0;
    while(hex[i]){
        int up = '0' <= hex[i] && hex[i] <= '9' ? hex[i] - '0' : hex[i] - 'a' + 10;//lowcase
        if(hex[++i] == '\0'){
            printf("invalid format\n");
            return -1;
        }
        int low = '0' <= hex[i] && hex[i] <= '9' ? hex[i] - '0' : hex[i] - 'a' + 10;//lowcase
        text[j++] = up * 16 + low;
        ++i;
    }
    text[j] = 0;
    printf("%s", text);

    return 0;
}