(c ++)使用ifstream将.dat文件读取为十六进制

mrg*_*g95 1 c++ string binary hex ifstream

这是我的第一篇文章,如果我违反任何不成文的规则,那就很抱歉.:PI是初学者/中级程序员,我需要这个程序的帮助.

我试图将.dat文件中的.dat文件作为HEX输入/读/ ifstream(无论如何)变成一个大字符串.

我不想把它看作文字.我想要十六进制格式,所以我可以搜索字符串并对其进行更改.(像自动十六进制编辑器一样)

恩.我的文件"00000000.dat"大小约为7kb.

在十六进制编辑器中,hex看起来像这样:

0A 00 00 0A 00 05 4C 65 76 65 6C 07 00 06 42 6C 6F 63 6B 73 00 00 80 00 07 FF 39
01 FF 03 03 02 FF 3F 00 07 FF 39 01 FF 03 03 02 FF 3F 00 07 FF 39 01 FF 03 03 02
FF 3F 00 07 FF 39 01 FF 03 03 02 FF 3F 00 07 FF 39 01 FF 03 03 02 FF 3F 00 07 FF
39 01 FF 03 03 02 FF 3F 00 07 FF 39 01 FF 03 03 02 FF 3F 00 07 FF 39 01 FF 03 03
02 FF 3F 00..... for a while...
Run Code Online (Sandbox Code Playgroud)

我需要一个字符串变量(最好没有空格).

我当前的代码很糟糕,现在只打印结果.(从ehow获得)并且似乎挑选并选择它想要输入/打印的内容.

#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    ifstream input;
    input.open("00000000.dat");

    unsigned char h1,h2;

    do
    {
        input >> h1;
        cout << hex << (unsigned int)h1;
        input >> h2;
        cout << hex << (unsigned int)h2;
    }while(!input.eof());

cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个很大的文件,所以我无法显示你打印的是什么,但它缺少一些字节.(例如"0A 00 00 0A 00 05 ....."打印为"00 05 .....")这也适用于结尾.

对不起,如果我没有解释清楚:(

jxh*_*jxh 6

如上所述,您应该将流打开为二进制.>>如果您告诉它不要跳过空格,您可以使用常规运算符.

unsigned char x;
std::ifstream input("00000000.dat", std::ios::binary);
input >> std::noskipws;
while (input >> x) {
    std::cout << std::hex << std::setw(2) << std::setfill('0')
              << (int)x;
}
Run Code Online (Sandbox Code Playgroud)

要将内容转换为字符串,您可以使用ostringstream而不是cout.