在C中从十六进制字符串转换为ASCII字符串

在C中从十六进制字符串转换为ASCII字符串,c,string,ascii,C,String,Ascii,我正在尝试将十六进制字符串转换为其等效的ASCII。我得到一个字符串的“十六进制”值作为字符串,也就是说,我得到的不是“ABCD”,而是“41424344”。我只需要提取41,这将是我的十六进制值,并重新编码为“ABCD”。这是我的 int main(int argc, char *argv[]){ char *str = "ABCD"; unsigned int val = 0; int i = 0; int MAX = 4; for (i =

我正在尝试将十六进制字符串转换为其等效的ASCII。我得到一个字符串的“十六进制”值作为字符串,也就是说,我得到的不是“ABCD”,而是“41424344”。我只需要提取41,这将是我的十六进制值,并重新编码为“ABCD”。这是我的

   int main(int argc, char *argv[]){

    char *str = "ABCD";
    unsigned int val = 0;
    int i = 0;
    int MAX = 4;
    for (i = 0; i<MAX; i++){
        val = (str[i] & 0xFF);
        //printf("dec val= %d\n", val);
        //printf("hex val= %02x\n", val);
    }
    val = 0;
    char *hexstr = "41424344";
    char *substr = (char*)malloc(3);
    char *ptr = hexstr;

    for (i = 0; i<8; i++){
        strncpy(substr, ptr, 2);
        printf("substr = %s\n", substr);
        int s = atoi(substr);
        printf("s= %d\n", s);
        ptr= ptr+2;
        i = i+2;
    }
    return 0;

}
intmain(intargc,char*argv[]){
char*str=“ABCD”;
无符号int val=0;
int i=0;
int MAX=4;
对于(i=0;i将“s”变量行从

ints=atoi(substr);


int s=strtol(substr,NULL,16);

您有strtol来转换另一个基中的字符串,还有printf中的%x或%x来显示一个六进制值为
substr
分配3个字节。忘记了
'\0'
?相关:谢谢Jeyaram!傻我:)
substr
没有nul终止符,因此从
atoi
返回的值仍然是未定义的。啊,for循环增量步骤中也有一个有趣的输入错误。
i+i
。无论如何更新了答案,希望它能帮助Shi sudopunk,为什么我在for循环语句中得到警告:语句无效?您的循环需要assingn一个值到i.
(i=0;i
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){

    char *str = "ABCD";
    unsigned int val;
    val = 0;
    int i = 0;
    int MAX = 4;
    for (i = 0; i<MAX; i++){
        val = (str[i] & 0xFF);
        //printf("dec val= %d\n", val);
        //printf("hex val= %02x\n", val);
    }
    val = 0;
    char *hexstr = "41424344";
    char *substr = (char*)malloc(3);
    char *ptr = hexstr;
    char *retstr = (char *)malloc(5);
    char *retptr = retstr;

    for (i = 0; i<8; i+1){
        strncpy(substr, ptr, 2);
        printf("substr = %s\n", substr);
        int s = strtol(substr, NULL, 16);
        printf("s= %d\n", s);
        ptr= ptr+2;
        i = i+2;
        sprintf(retptr, "%c", s);
        retptr = retptr +1;
    }
    printf("retstr= %s\n", retstr);
    return 0;

}