如何通过从给定字符串中复制来创建包含多个'\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/

10-10 07:58