转换为ASCII字符串从用C十六进制字符串 [英] Convert to ASCII String from hex String in C

查看:121
本文介绍了转换为ASCII字符串从用C十六进制字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想一个十六进制字符串转换为其对应的ASCII。我给出一个字符串的六角的价值作为一个字符串,即不是ABCD我得到41424344。我只需要提取41这将是我的hexvalue和再code为ABCD。下面是我。

  INT主(INT ARGC,CHAR *的argv []){    char *之海峡=ABCD;
    unsigned int类型VAL = 0;
    INT I = 0;
    INT MAX = 4;
    对于(i = 0; I< MAX;我++){
        VAL =(STR [1] - 安培; 0xFF的);
        //的printf(DEC VAL =%d个\\ N,VAL);
        //的printf(六角VAL =%02X \\ n,VAL);
    }
    VAL = 0;
    字符* hexstr =41424344;
    字符* SUBSTR =(字符*)malloc的(3);
    字符* PTR = hexstr;    对于(i = 0; I< 8;我++){
        函数strncpy(SUBSTR,PTR,2);
        的printf(SUBSTR =%S \\ n,SUBSTR);
        INT S =的atoi(SUBSTR);
        的printf(S =%d个\\ N,S);
        PTR = PTR + 2;
        I = I + 2;
    }
    返回0;}

的事情是从这里开始,我不得不做出这个S值是一个十六进制值,而不是一个int。如何才能做到这一点?

更新:

下面是我你的答案后:

 的#include<&stdio.h中GT;
#包括LT&;&stdlib.h中GT;
#包括LT&;&string.h中GT;
INT主(INT ARGC,CHAR *的argv []){    char *之海峡=ABCD;
    无符号整型VAL;
    VAL = 0;
    INT I = 0;
    INT MAX = 4;
    对于(i = 0; I< MAX;我++){
        VAL =(STR [1] - 安培; 0xFF的);
        //的printf(DEC VAL =%d个\\ N,VAL);
        //的printf(六角VAL =%02X \\ n,VAL);
    }
    VAL = 0;
    字符* hexstr =41424344;
    字符* SUBSTR =(字符*)malloc的(3);
    字符* PTR = hexstr;
    字符* retstr =(字符*)malloc的(5);
    字符* retptr = retstr;    对于(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);
    返回0;}


解决方案

更改的变线

int类型=的atoi(SUBSTR);

int类型=与strtol(SUBSTR,NULL,16);

I am trying to convert a hex string to its equivalent ASCII. I am given a "hex" value of a string as a string, i.e instead of "ABCD" I get "41424344". I just need to extract 41 which will be my hexvalue and recode as "ABCD". Here is what I have.

   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;

}

The thing is from here on, I have to make this "s" value to be a hex value and not an int. How can this be done?

UPDATE:

Here is what I have after your answers:

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

}

解决方案

Change your "s" variable line from

int s = atoi(substr);

to

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

这篇关于转换为ASCII字符串从用C十六进制字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆