Я читаю кучу битовых значений из текстового файла, который находится в двоичном формате, потому что я сохранил их с помощью fwrite
. Проблема в том, что первое значение в файле имеет размер 5 байт, а следующие 4800 - 2 байта. Поэтому, когда я пытаюсь выполнить цикл через файл и прочитать значения, это даст мне неправильные результаты, потому что моя программа не знает, что она должна принимать 5 байтов в первый раз, а затем 2 байта, оставшихся 4800 раз.Как вы можете читать значения битов разных размеров из файла?
Вот как я на велосипеде через файл:
long lSize;
unsigned short * buffer;
size_t result;
pFile = fOpen("dataValues.txt", "rb");
lSize = ftell(pFile);
buffer = (unsigned short *) malloc (sizeof(unsigned short)*lSize);
size_t count = lSize/sizeof(short);
for(size_t i = 0; i < count; ++i)
{
result = fread(buffer+i, sizeof(unsigned short), 1, pFile);
print("%u\n", buffer[i]);
}
Я уверен, что я собираюсь нужно изменить свое fread
заявление, потому что первое значение имеет тип time_t
, так что я буду вероятно, нужно заявление, что выглядит следующим образом:
result = fread(buffer+i, sizeof(time_t), 1, pFile);
Однако это не сработало работу, когда я попробовал это, и я думаю, что это потому, что я не изменяя исходное положение должным образом. Я думаю, что пока я читаю 5 байт данных, я не перемещаю исходную позицию достаточно.
У кого-нибудь есть хорошее представление о fread
? Не могли бы вы сообщить мне, что я могу изменить, чтобы моя программа выполнила то, что мне нужно.
EDIT:
Это, как я пишу в файл.
fwrite(&timer, sizeof(timer), 1, pFile);
fwrite(ptr, sizeof(unsigned short), rawData.size(), pFile);
EDIT2:
Я попытался прочитать файл, используя ifstream
int main()
{
time_t x;
ifstream infile;
infile.open("binaryValues.txt", ios::binary | ios::in);
infile.read((char *) &x, sizeof(x));
return 0;
}
Однако, теперь он не компилируется и просто дать мне кучу undefined reference to
ошибок в коде, Я даже не написал.
Это может быть полезно разместить код, используемый для хранения данных.Также вы читаете этот файл с другой машины, которая его написала? – Galik
Нет такой же машины, и я добавил код 'fwrite'. Это довольно стандартно. Я просто беру некоторые значения из QVector и записываю их в файл. –
Код, используемый для хранения данных, выглядит как C++? Значит, это должно быть помечено C++? – cat