在C中存储等效字符的十六进制

时间:2012-03-25 02:20:04

标签: c hex ascii

参考问题的第二个答案:How to convert from ASCII to Hex and vice versa?

我想保存char hex [3]相当于不同的字符,如下所示:

char *str ="abcd";

// I want to get hex[3] of each character in above string and save into the following:

char str2[4]; // should contain hex values as : \x61 for a,\x62 for b,\x63 for c,\x64 for d

我该怎么做?

到目前为止,我尝试了以下内容:

int i;
char ch;
char hex[3];
for(i=0; i<strlen(str);i++) {
    ch = charToHex(*(str+i), hex);
    // now hex contains the first and second hex characters in hex[0] & hex[1]
    // I need to save them in the first index of str2 
    // e.g. if hex[0] = 7 and hex[1] = f, then str2[0] should be "\x7f"

    // -> how do I do this part ?

}

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用for loop迭代字符串的所有字符,然后为每个字符应用转换。请记住,C字符串是null-terminated

另请注意,如果您想要存储\x61\x62\x63\x64,则4个字符是不够的 - 您需要4 * strlen(str) + 1,即17。


回应代码:

您实际上并不需要chfunction charToHex返回void,即没有。

只需将字符复制到输出字符串,如下所示:

str2[2*i] = hex[0];
str2[2*i+1] = hex[1];

同样,不要忘记在结果字符串中设置null终止符。

此外,由于您在每次迭代中都致电strlen,因此您正在撰写Schlemiel the Painter algorithm