通过C ++读取二进制数据

时间:2016-08-25 09:37:19

标签: c++ binary

我尝试通过下面的C ++程序读取二进制数据。但它无法显示值。 The data保存为8位无符号字符。让我知道如何解决它。

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        cout << "argument error" << endl;
        return 1;
    }

    ifstream file (argv[1], ios::in|ios::binary);
    //ifstream fin( outfile, ios::in | ios::binary );

    if (!file)
    {
        cout << "Can not open file";
        return 1;
    }

    unsigned char d;

    while(!file.eof())
    {
        file.read( ( char * ) &d, sizeof( unsigned char ) );

        cout << d << endl; 
    }

    file.close(); 

    return 0;
}

1 个答案:

答案 0 :(得分:6)

首先don't do while (!file.eof())

然后针对您的问题:输出字符。这意味着流将尝试将其打印为字符,这对于二进制数据来说是不正确的。

如果要打印您阅读的值,则需要将其转换为整数。像

这样的东西
std::cout << std::hex << std::setw(2) << std::setfill('0') <<
          << static_cast<unsigned int>(d);

以上内容应将值打印为2位十六进制数字。重要的是static_cast