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

在C中存储字符的十六进制等价物,c,hex,ascii,C,Hex,Ascii,关于问题的第二个答案: 我想保存不同字符的字符十六进制[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 我该怎么做 到目前

关于问题的第二个答案:

我想保存不同字符的字符十六进制[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 ?

}
inti;
char ch;
char-hex[3];
对于(i=0;i)如何做这部分?
}
谢谢。

您可以使用a对字符串中的所有字符进行迭代,然后对每个字符应用转换。请记住,C字符串是

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


针对该守则:

您实际上不需要
ch
。返回
void
,即无

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

str2[2*i] = hex[0];
str2[2*i+1] = hex[1];
同样,不要忘记在结果字符串中设置null终止符


另外,由于您在每次迭代中调用
strlen
,因此您正在编写一个。

这不是一个为我编写代码的站点。您尝试了什么?您卡在哪里了?还要注意字符串
“\\x61”
可能不适合
字符[4]
,因为有空终止符。(我说“可能”,因为如果您愿意,您可以在没有空终止符的情况下工作,但这很尴尬,而且,我怀疑,这不是您想要的。)答案不会以固定的顺序出现——顺序取决于向上投票和向下投票——所以“第二个答案”不是您所指内容的有用描述。为什么不使用“链接”链接在它的底部?@Marcelocontos请查看更新question@Jake:
str2[0]
属于
char
类型。它无法容纳字符串
“\\x7f“
。如果您想将值
0x7f
存储为一个字符,那么您只需复制未经修改的源数据,在这种情况下,您可以只编写
memcpy(str2,str,4)
。我尝试了您的解决方案;最后,使用printf(“%s”,str2)打印str2),它打印出61626364。现在我的问题是:char*str3=“\x61\x62\x63\x64”,这与我们得到的结果相同吗,因为目标是从str1转换为str3格式。好的,如果你想要额外的
\x
,你可以简单地将每四个字符设置为
'\\\'
(从第二个开始)到
'x'
。代码保持不变;只需将
2*i
替换为
4*i
。大小是否会有任何变化?我建议不要考虑变化,而只是确定大小。如果每个输入字符的输出中都有x个字符,则需要保留
x*strlen(输入)输出中有+1个字节。