如何通过从给定字符串中复制来创建包含多个'\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~!"
最佳答案
不能通过重新解释字符串的源格式来转换字符串。改为使用这个(效率低,但很简单):
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);
关于c - 字符串连接,带有“\x”十六进制字符转义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33993259/