如何创建一个包含多个'\x41'
或任意'\xnn'
字符串的字符串,例如来自某些字符串的副本:
char * string1 = "4141414141414141";
或char * string2 = "bde54d7ee10a2122";
我希望我char * string3
成为:
char * string3 = "\xbd\xe5\x4d\x7e\xe1\x0a\x21\x22";
或char * string3 = "\x41\x41\x41\x41\x41\x41\x41\x41";
以下是我要尝试的代码,但它不起作用。
char * string1 = "4141414141414141";
char c;
char * slash_x = "\\x";
int len = strlen(string1);
char * string3 = (char *) malloc(9);
for (i = 0; i < len; i++) {
if (0 == i % 2) {
printf("start\n");
j = i;
strcat(salt_empty, slash_x);
c = string[j];
printf("%c\n", c);
strncat(salt_empty, &c, 1);
j++;
c = string[j];
printf("%c\n", c);
strncat(salt_empty, &c, 1);
}
}
printf("%s\n", string3);
因此,在控制台上string3
的输出将为"\x41\x41\x41\x41\x41\x41\x41\x41"
而不是"AAAAAAAA"
。
如何修复代码以获取"AAAAAAAA"
如果string1为"bde54d7ee10a2122"
,则控制台的string3
输出为��M~
!"
答案 0 :(得分:2)
您无法通过从源表单重新解释字符串来转换字符串。改为使用它(低效但简单):
char *string1 = "4141414141414141";
int i, j, len = strlen(string1) & ~1;
char string3[len / 2 + 1];
for (i = j = 0; i < len; i += 2, j++) {
char buf[3];
memcpy(buf, string1 + i, 2);
buf[2] = '\0';
string3[j] = strtol(buf, NULL, 16);
}
string3[j] = '\0';
printf("%s\n", string3);
答案 1 :(得分:1)
你想:
char string1[] = {0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0};
答案 2 :(得分:0)
对于源字符串中的每对字符,确定对中每个字符的十六进制值,将它们组合起来以得到编码字符,然后将结果存储在目标字符串中。