C / C ++如何将int转换回字符串(一个单词)?

时间:2015-05-13 21:04:12

标签: c string int scanf

在C中我从txt文件中读取一个字符串,例如字符串" hello",所以我有我的:

F=fopen("text.txt","r");
fscanf(F,"%s\n",string);

现在,如果我想将此字符串转换为十六进制和十进制,我可以这样做:

for (i=0; i<strlen(string); i++)
{
   sprintf(st, "%02X", string[i]);  //Convert to hex
   strcat(hexstring, st);

   sprintf(st, "%03d", string[i]);  //Convert to dec
   strcat(decstring, st);
}

现在,我的问题是:我想做逆操作,但是怎么做? 如果我转换&#34;你好&#34;

,这是输出
   hex-> 68656c6c6f
   dec-> 104101108108111

来自&#34; 68656c6c6f&#34;或&#34; 104101108108111&#34;我想回到&#34;你好&#34;,我该怎么做?

(基本上我想做这样的网站:http://string-functions.com/;     字符串到十六进制转换器,十六进制到字符串转换器,十进制到十六进制,转换器,十六进制到十进制转换器)

1 个答案:

答案 0 :(得分:0)

挑战是要意识到你有一个十六进制的字符串和十进制的字符串,这意味着你有一个字符串表示值,而不是值本身。因此,在转换回原始字符串之前,您需要将字符串表示转换为适当的数值。

假设您有hex作为双字节十六进制字符对的字符串表示形式,以下内容将从hello返回原始字符串68656c6c6f

/* convert hex string to original */
char hex2str[80] = {0};
char *p = hex2str;
int i = 0;
int itmp = 0;

while (hex[i])
{
    sscanf (&hex[i], "%02x", &itmp);
    sprintf (p, "%c", itmp);
    p++;
    i+=2;
}
*p = 0;

printf ("\n hex2str: '%s'\n\n", hex2str);

<强>输出

$ ./bin/c2h2c < <(printf "hello\n")

 hex2str: 'hello'

简短工作示例

#include <stdio.h>
#include <string.h>

#define MAXS 64

int main (void) {

    char hex[] = "68656c6c6f";
    char hex2str[MAXS] = {0};
    char *p = hex2str;
    int itmp = 0;
    int i = 0;

    /* convert hex string to original */
    while (hex[i])
    {
        sscanf (&hex[i], "%02x", &itmp);
        sprintf (p, "%c", itmp);
        p++;
        i+=2;
    }
    *p = 0;

    printf ("\n hex2str: '%s'\n\n", hex2str);

    return 0;
}

<强>输出

$ ./bin/c2h2c

 hex2str: 'hello'