Я должен читать данные из двоичного файла.Этот двоичный формат данных: 0x00 0x00 0x01 - это разделитель, после этого разделителя существует массив байтов необработанных данных.Итак, чтобы подвести итог, мой двоичный файл выглядит так:
0x00 0x00 0x01 (здесь байт необработанных данных) 0x00 0x00 0x01 (вот еще один блок байтов необработанных данных) 0x00 0x00 0x01 ....
Итак, я написал такой код для разбора моего файла (я не очень знаком с C)
ifstream inp("myfile.bin",ios::binary);
char b1, b2, b3;
while (!inp.eof())
{
inp.read(&b1,sizeof(b1));
inp.read(&b2,sizeof(b2));
inp.read(&b3,sizeof(b3));
//finding first delimiter (data starts from delimiter)
while (!((0==b1)&&(0==b2)&&(1==b3)))
{
b1=b2;
b2=b3;
if (inp.eof())
break;
inp.read(&b3,sizeof(b3));
}
if (inp.eof())
break;
char* raw=new char[65535];
int rawSize=0;
inp.read(&b1,sizeof(b1));
inp.read(&b2,sizeof(b2));
inp.read(&b3,sizeof(b3));
raw[rawSize++]=b1;
raw[rawSize++]=b2;
if (inp.eof())
break;
//reading raw data until delimiter is found
while (!((0==b1)&&(0==b2)&&(1==b3)))
{
raw[rawSize++]=b3;
b1=b2;
b2=b3;
if (inp.eof())
break;
inp.read(&b3,sizeof(b3));
}
rawSize-=2; //because of two bytes of delimiter (0x00 0x00) would be added to raw
//Do something with raw data
if (inp.eof())
break;
inp.putback(1);
inp.putback(0);
inp.putback(0);
delete []raw;
}
Но иногда этот код попадает в бесконечный цикл.Не могли бы вы посоветовать мне что-нибудь?Спасибо