【问题标题】:Convert Hexdump to string in c在c中将Hexdump转换为字符串
【发布时间】:2011-01-15 16:39:46
【问题描述】:

有没有办法转换十六进制转储,例如aec4d2f3c6a4e70ea6cea074f65812d2a34b180cc92b817edcd867167e7a91c5beb942f0 到 c 中的字符串,以便每两个十六进制数字组成一个字符?如果有,是什么?

【问题讨论】:

  • 刚刚解码了字符串 char *str = "有人会为我做更多的功课:-)";
  • 您可以将 hexdump 转换为 字节数组。您不一定可以将其转换为 string。如果你有一个 0x00 字节怎么办?还是在您的字符编码中无效的字节?

标签: c++ c hex hexdump


【解决方案1】:

从标准输入读取并打印到标准输出:

int main() 
{
    int ch;
    while(scanf("%2x", &ch) == 1)
        putchar(ch);
}

我认为您可以根据自己的特定源和目标要求轻松修改它。

【讨论】:

    【解决方案2】:

    其中一种方式:

    size_t unBytes = strHex.size() / 2;
    std::string strResult(unBytes, 0);
    for (size_t i = 0; i < unBytes; ++i)
    {
        std::istringstream in(strHex.substr(2*i, 2));
        int byte = 0;
        in >> std::hex >> byte;
        strResult[i] = byte;
    }
    

    【讨论】:

    • 你抓住了我——我不知道这是否是个玩笑。
    • @j_random_hacker:它是 C++ =) 当然它可以做得更短更快。我刚刚从我的一个程序中复制粘贴了它
    • @Nawaz 谢谢。原来 unStart 和 unEnd 有一些偏移
    • @ssmir:好的。我意识到istringstream 需要调用substr()(在理想情况下,它会有一个构造函数采用迭代器对,这可以避免这种情况,但这不是你的错),但请至少在strResult 中预先分配足够的空间并直接使用strResult[i] = byte;,而不是浪费时间通过encoded。你根本不需要encoded
    • @j_random_hacker 谢谢。最初我需要这个向量,但现在 - 不需要。
    【解决方案3】:

    反复使用带有%hhx 的scanf。见man scanf

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 2020-02-20
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多