我正在尝试将 ASCII 十六进制值(0x61或61)转换为它的char
值(61 = a等等)没有 atoi
,scanf
,strcat
。
我正在将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中,然后它应该可以工作。 谢谢:))
答案 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;
}