带有十六进制字符串的文件。需要格式化,以便我可以在程序中使用它

时间:2010-01-08 17:32:20

标签: c++

我有一个保存在文本文件中的十六进制值字符串。我希望将其转换为c样式包含格式,以便复制并粘贴到我的代码中。我尝试使用具有此功能的xxd,但出于某种原因,当我使用我的文件时,它会接受该字符串(它认为它是非十六进制)并进一步将其转换为十六进制。

无论如何围绕这个或更简单的方式在c ++中执行此操作。我不确定。这是c ++的新手,只是在这里学习。

该文件内容的样本如下:

AFAB2591CFB70E77C7C417D8C389507A541D0350752EE9E8C12D76E8674677C166A5ACA65ECFDE7EC90DC8E7D6D621438FEF7DD38B0EDEA3D44BDB9D6E7E1CA0FBA30B507EA70B2A52434F64092EC13BD12F8F1C2BED6EE1ADE7

所以得到像0xAF,0xAB等是我正在寻找的。

我也注意到,当我使用xxd时,即使我只是将A放在文件中......其结果是410a。我也不明白。是显示一个单词而不只是一个字节?

4 个答案:

答案 0 :(得分:1)

您可以使用任何正则表达式编辑器进行转换

... AFAB2591CFB70

到0xAF,0xAB,0x25,0x91,0xCF,0xB7,...

我使用MSFT Visual Studio,这是它的“查找和替换”工具的RE选项的快照。找到由集合[0-9A-Fa-f]中的任何字符组成的任何表达式,后跟同一集合中的另一个字符;标记表达;将其替换为“0x”+标记的表达式+“,”。 (不要匹配整个单词。)

如果您使用的是其他GUI开发工具,您应该可以轻松找到命令行 sed (Linux或Cygwin)或类似的东西。

答案 1 :(得分:0)

好的第一个老兄得到代码来找到像这样的字符串

#include <iostream>
#include <conio.h>
#include <fstream>
#include <iostream>

using namespace std;

class FindHex {
    string x, y;
  public:
    void set_values (string,string);
   string found () {return (x,y);}
};

void FindHex::set_values ( string a, string b) {
    cout<<a<<" "<<b;
    x = a;
    y = b;
}

FindHex hex;

int main () {
    char Name[10];
    char LName[10];
    ifstream inf("Data.txt");

    while(!inf.getline(Name, 30, '0x').eof())
    {
        inf.getline(LName, sizeof(LName));
        hex.set_values (Name,LName);
        hex.found();
        cin.ignore();    
    }

}

答案 2 :(得分:0)

string s = ...; // Read the string into this
stringstream buffer;

for (size_t i = 0; i < s.length(); i += 2) {
   char tmp[3] = { s[i], s[i + 1], 0 };
   buffer << (char)strtol(tmp, NULL, 16);
}

const string final = buffer.str();

你去吧!

答案 3 :(得分:0)

看起来像家庭作业,但是到底是什么。将其编译为filter.exe,然后:

过滤器&lt; inputfile.txt&gt; outputfile.cpp

#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
    char a, b;
    while (!cin.eof()) {
        cin >> a >> b;
        cout << "0x" << a << b << ", ";
    }
    return 0;
}