转换为ASCII字符串从用C十六进制字符串 [英] Convert to ASCII String from hex String in 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屋!