【问题标题】:String of text hex data from text file to real hex从文本文件到真实十六进制的文本十六进制数据字符串
【发布时间】:2013-11-14 01:03:54
【问题描述】:

我想将文本文件中存储为文本的十六进制数据行转换为存储为字符的十六进制数据,如下所示:

文本文件内容:

41:89:47:AB

A7:33:1D:AC

所需格式:

char Data[NumberOfLinesInFile][HexPerLine];

注意每行的十六进制数是固定的。

数据应如下所示:

Data[0][0] = 0x41;
Data[0][1] = 0x89;
Data[0][2] = 0x47;
Data[0][3] = 0xAB;
Data[1][0] = 0xA7;
Data[1][1] = 0x33;
Data[1][2] = 0x1D;
Data[1][3] = 0xAC;

我遇到的问题是努力让文本行由“:”分隔,并解释为十六进制,而不是 ASCII 或其他。

如果有人能提供一些关于如何解决这个问题的见解,我将不胜感激。过去 3 天我一直在拔头发。

提前谢谢你!

【问题讨论】:

  • 如果你过去三天一直在“苦苦挣扎”,我想你至少应该有最近发布的源代码。请edit 将您的问题包含在内,并解释它如何无法按您的预期工作。 (顺便说一句,您的符号是向后的。应该是Data[Line][1]Data[Line][2] 等,其中Line 是从0NumberOfLinesInFile - 1 的值。)
  • 我一直在努力尝试使用各种函数的 sn-ps 代码。我所拥有的会引起更多的混乱,因为它甚至不接近我需要让它工作的东西。就源代码而言,我没有任何实质性的东西可以证明这会给上面的帖子带来任何好处。无论如何,感谢您的提醒。
  • 我现在意识到后向符号和“从 0 开始”方面。感谢您指出。我会相应地编辑帖子。
  • 这是一个个人项目。我不是大学生。
  • 如果有人有什么要提供的,例如“试试这个功能”,将不胜感激。

标签: c++ text hex delimiter


【解决方案1】:

主要的潜在问题是读取由冒号分隔的一行十六进制值。最简单的方法似乎是将每一行读入一个字符串,用空格替换冒号,并在将基数设置为十六进制后读取值:

for (std::string line; std::getline(in, line); ) {
    std::replace(line.begin(), line.end(), ':', ' ');
    std::istringstream in(line);
    std::vector<unsigned char> values{ std::istream_iterator<int>(in >> std::hex),
                                       std::istream_iterator<int>() };
    // now distribute the chars
}

好像不太复杂……

【讨论】:

  • 感谢您的建议!当你使用“in”时,是打开的文件文件流名吗?
  • 我尝试了您的建议,添加了所有适当的标头,但是,类似开头的“std::vector ...”标记编译器错误:“在 C++98 中,'值'必须初始化通过构造函数,而不是'{...}'”。我正在使用 MinGW 4.8.1-4
  • @StuartKerr:您似乎忽略了-std=c++11。如果您不想使用 C++11 模式进行编译,您实际上可以使用括号:&gt;&gt; std::hex 部分应该防止 Most Vexing Parse 使用大括号的主要意图。
  • 谢谢!我没有在项目编译器设置中添加“-std=c++11”。我添加了它,但是添加后仍然存在相同的错误...
  • 没关系!我用 -std=c++11 替换了所有设置的东西,这停止了编译器一起工作,保持以前的错误不变。我添加了 -std=c++11 而不是用它替换所有设置,现在一切正常! Vielen Dank!
猜你喜欢
  • 2014-02-04
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2014-04-08
  • 2013-12-20
  • 1970-01-01
相关资源
最近更新 更多