【问题标题】:Store hex equivalent of character in C在 C 中存储字符的十六进制等价物
【发布时间】:2012-03-25 02:20:03
【问题描述】:

参考问题的第二个答案: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 ?

}

谢谢。

【问题讨论】:

  • 这不是一个为我写代码的网站。你试过什么?你被困在哪里了?另请注意,字符串 "\\x61" 可能不适合 char[4] 因为空终止符。 (我说“可能”,因为如果你愿意,你可以在没有空终止符的情况下工作,但这很尴尬,而且我怀疑这不是你想要的。)
  • 答案不会以固定的顺序出现——顺序取决于赞成票和反对票——所以“第二个答案”并不是对您所指内容的有用描述。为什么不使用底部的“链接”链接直接链接到您想到的答案?
  • @MarceloCantos 请查看更新后的问题
  • @Jake: str2[0] 的类型为 char。它不能保存字符串"\\x7f"。如果您想将值0x7f 存储为字符,那么您无非是原封不动地复制源数据,在这种情况下,您不妨直接写memcpy(str2, str, 4)

标签: c hex ascii


【解决方案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];

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

此外,由于您在每次迭代中调用 strlen,因此您正在编写 Schlemiel the Painter algorithm

【讨论】:

  • 我试过你的解决方案;最后,当使用 printf("%s",str2) 打印 str2 时,它会打印出 61626364。现在我的问题是我有:char *str3="\x61\x62\x63\x64",这是和我们得到的结果一样,因为目标是从 str1 转换为 str3 格式。
  • 好吧,如果你想要一个额外的\x,你可以简单地将每四个字符设置为'\\',将每四个字符(从第二个开始)设置为'x'。代码保持不变;只需将2*i 替换为4*i
  • 尺寸会有变化吗?
  • 我建议不要考虑更改,而只是确定大小。如果每个输入字符的输出中都有 x 个字符,则需要在输出中保留 x * strlen(input) + 1 字节。
猜你喜欢
  • 1970-01-01
  • 2017-01-02
  • 2023-04-11
  • 2014-09-25
  • 2019-03-27
  • 2023-04-02
  • 2016-04-05
  • 2015-01-31
  • 2015-08-27
相关资源
最近更新 更多