在C中存储字符的十六进制等价物
关于问题的第二个答案: 我想保存不同字符的字符十六进制[3]等价物,如下所示:在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 我该怎么做 到目前
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个字节。