Я пытаюсь прочитать двоичный файл со следующей двоичной конфигурацией
00 00 00 1A 79 20 83 DB 44 ...
используя следующую функцию
static BitArray getBitArray(string filename)
{
FILE *fs = fopen(filename.data(),"r");
fseek (fs , 0 , SEEK_END);
unsigned long s = ftell (fs);
rewind (fs);
unsigned char *buffer = new unsigned char[s+1];
fread(buffer,1,s,fs);
BitArray bArray;
for(int i=0; i<s; i++)
bArray.add(buffer[i]);
delete[] buffer;
fclose(fs);
return bArray;
}
где BitArray
- это просто мой собственный класс управления битами. Проблема в том, что для bin-файла, о котором я упоминал выше, он читает только первые три 0, например:
00 00 00
хотя fseek
нашел правильный размер файла.
Что касается того, почему мне нужна эта строка 0, так это потому, что 00 00 00 1A
образует 32-битное целое число, которое оказалось достаточно маленьким, чтобы оставить три 0x00
.
Я подозревал, что строка 0x00
s в начале файла распознается как EOF
, поэтому я попытался добавить char перед файлом, но это не совсем сработало.
Что может быть причиной этого?