C/C++如何将int转回string(一个字)?
C/C++ How to convert back int to string (a word)?
在 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);
}
现在,我的问题是:我想做逆运算,但是怎么做呢?
这是我转换 "hello"
时的输出
hex-> 68656c6c6f
dec-> 104101108108111
我想从“68656c6c6f”或“104101108108111”回到"hello",我该怎么做?
(基本上我想做类似这个网站的事情:http://string-functions.com/;
字符串到十六进制转换器、十六进制到字符串转换器、十进制到十六进制、转换器、十六进制到十进制转换器)
挑战是要意识到你有一个十六进制的 string 和一个十进制的 string,这意味着你有一个字符串表示价值观,而不是价值观本身。因此,在转换回原始字符串之前,您需要将字符串表示形式转换为适当的数值。
假设您有 hex
作为双字节十六进制字符对的字符串表示,以下将 return 来自 68656c6c6f
的原始字符串 hello
:
/* 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'
在 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);
}
现在,我的问题是:我想做逆运算,但是怎么做呢? 这是我转换 "hello"
时的输出 hex-> 68656c6c6f
dec-> 104101108108111
我想从“68656c6c6f”或“104101108108111”回到"hello",我该怎么做?
(基本上我想做类似这个网站的事情:http://string-functions.com/; 字符串到十六进制转换器、十六进制到字符串转换器、十进制到十六进制、转换器、十六进制到十进制转换器)
挑战是要意识到你有一个十六进制的 string 和一个十进制的 string,这意味着你有一个字符串表示价值观,而不是价值观本身。因此,在转换回原始字符串之前,您需要将字符串表示形式转换为适当的数值。
假设您有 hex
作为双字节十六进制字符对的字符串表示,以下将 return 来自 68656c6c6f
的原始字符串 hello
:
/* 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'