用c ++将文件读入二进制数组

时间:2012-10-23 06:36:06

标签: c++ arrays binary char unsigned

我有一个文件包含多个jpeg的数据(以及一些垃圾),我需要从这个文件中提取二进制文件,过滤掉垃圾并创建jpeg。我知道jpegs的起始二进制序列。

char buffer[30];
ifstream fin;
fin.open ("FILENAME.raw", ios::in | ios::binary);
while (!fin.eof())
{
    fin.read(buffer,30);
    cout<<buffer[2]<<endl;
}
fin.close();

这里我试图以二进制文件打印文件但是,当我运行此代码时,屏幕上会打印出外来字符。

2 个答案:

答案 0 :(得分:2)

我认为这里的问题是“cout&lt;&lt; buffer [2]”,它将您的二进制信息转换为charecters。尝试使用int cast之前,还应该使用静态“unsigned char数组” 因为二进制数据可以是无符号的。这将起作用:

unsigned char buffer[ 30 ];
ifstream fin;
fin.open ("FILENAME.raw", ios::in | ios::binary);
while (!fin.eof())
{

    fin.read( (char*)( &buffer[0] ), 30 ) ;
    cout << (int)buffer[2] << " ";
}
fin.close();
return 0;

另外,如果你想遍历二进制文件,为什么你只是打印缓冲区[2]。

答案 1 :(得分:1)

您应该仔细检查文件的二进制内容,因为您的代码看起来非常好。