我有一个保存在文本文件中的十六进制值字符串。我希望将其转换为c样式包含格式,以便复制并粘贴到我的代码中。我尝试使用具有此功能的xxd,但出于某种原因,当我使用我的文件时,它会接受该字符串(它认为它是非十六进制)并进一步将其转换为十六进制。
无论如何围绕这个或更简单的方式在c ++中执行此操作。我不确定。这是c ++的新手,只是在这里学习。
该文件内容的样本如下:
AFAB2591CFB70E77C7C417D8C389507A541D0350752EE9E8C12D76E8674677C166A5ACA65ECFDE7EC90DC8E7D6D621438FEF7DD38B0EDEA3D44BDB9D6E7E1CA0FBA30B507EA70B2A52434F64092EC13BD12F8F1C2BED6EE1ADE7
所以得到像0xAF,0xAB等是我正在寻找的。 p>
我也注意到,当我使用xxd时,即使我只是将A放在文件中......其结果是410a。我也不明白。是显示一个单词而不只是一个字节?
答案 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;
}