我有一个文件包含多个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();
这里我试图以二进制文件打印文件但是,当我运行此代码时,屏幕上会打印出外来字符。
答案 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)
您应该仔细检查文件的二进制内容,因为您的代码看起来非常好。