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

将十六进制值(ASCII)转换为文本,c,ascii,C,Ascii,我正在尝试将ASCII十六进制值(0x61或61)转换为char值(61=a等)而不使用atoi,scanf,strcat 我正在将getchar()保存到temp变量中,然后将第一个(6)保存到数组中,然后将第二个(1)保存到数组中,现在我想将这两个变量转换为ASCII值 68656c6c6f0d0a = hello void asd(char fde) { char asmg[3]; asmg[0] = "0x"; asmg[1] = "6"; asmg[2

我正在尝试将ASCII十六进制值(0x61或61)转换为
char
值(61=a等)而不使用
atoi
scanf
strcat

我正在将
getchar()
保存到temp变量中,然后将第一个(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]放在一个字符中,然后它就可以工作了。
谢谢:)

不确定您到底想做什么,但这可能会有所帮助

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");
}
int main(int argc,char**argv)
{
int hex[6]={0x68,0x65,0x6C,0x6C,0x6F};
int i=0;

对于(i=0;i,您可以使用此函数将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]);
 }
}
void hexToAscii(无符号字符*buf,整数大小,字符*str){
int i;
对于(i=0;i
不要让get将字符串上的最后一个元素设置为null。

\include
#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;
}
内部主(空){ 字符十六进制[]=“68656C6F0D0A”; 字符文本[(sizeof(hex)+1)/2]; int i=0,j=0; while(十六进制[i]){
int up='0'您能提供一个代码示例吗?您是否有充分的理由不使用任何库函数?因为这些函数是专门为该任务设计的。如果您想了解其背后的概念,我建议查看一些C库的源代码(例如glibc)。想想十六进制是什么意思。字符“6”对于您试图提取的字节值意味着什么?它与“1”有什么不同?模式是什么?
printf(“%c\n”,(char)strtol(fgets((char[6]){0},6,stdin),NULL,16))
?您的词汇表有点不正确。您想转换十六进制字符串吗"616865..."对于ASCII字符,其中0x61表示的字符是“a”。这就是为什么
scanf
atoi
在您的作业中被禁止的原因。您正在尝试进行字符串到数字的转换,结果恰好是数字代表一个字符。感谢您的帮助,这对我帮助很大,但我只读取了一个字符。我的意思是,f第一个getchar()给我6,第二个getchar给我8,现在我需要把前缀0x,char something[]={“0x”,“6”,“8”};现在我需要把它打印成“h”