3

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

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();

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

4

2 回答 2

2

我认为这里的问题是“cout << buffer[2]”,它将您的二进制信息转换为字符。尝试 int cast before ,你也应该使用静态的“unsigned char array”,因为二进制数据可以是无符号的。这将起作用:

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]。

于 2012-10-23T08:58:41.850 回答
1

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

于 2012-10-23T08:37:46.987 回答