我尝试通过下面的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;
}
答案 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
。