Я использую iostream для сбора данных с устройства. Сначала я записываю файл в режиме ASCII, он работает хорошо, но занимает довольно много времени. Затем я переключаюсь, чтобы писать в двоичном режиме, и это быстрее.
float dist[41616];
ofstream d_ofs( "numbers.dat",ios::out |ios::app|ios::binary);
// this is from the device API getting distance datas
res = GetDistances (hnd, dist, sizeof dist);
d_ofs.write((char*)&dist,sizeof dist);
d_ofs.close();
После сбора данных я должен преобразовать данные из "numbers.txt", чтобы они были доступны для чтения моим преподавателем, в текстовый файл. Я предполагаю, что это должно изменить двоичные необработанные данные на ASCII. поэтому я сначала читаю файл, а затем пишу в формате ASCII.
Я получаю числа, но, к сожалению, они не являются правильными числами. Я предполагаю, что должен быть специальный формат для этого процесса преобразования. Но до сих пор я не нашел решение из-за моих слабых знаний в области кодирования. Так может кто-нибудь дать мне рука? Большое спасибо заранее.
Вот мой код:
double fnum[41616]; // here is the mistake,it should be float[]
ifstream in("numbers.dat", ios::in | ios::binary);
in.read((char *) &fnum, sizeof fnum);
MessageBox("Read File done");
ofstream fout("output.txt");
for(int k=0; k<41616; k++) // show values read from file
fout <<dec<<"\t" << fnum[k] ;
in.close();
fout.close();
Заключаем:
Моя глупая ошибка в типе данных. Я написал double [] вместо float [] во второй части. Это действительно смущает. Надеюсь, этот пост может помочь начинающим, таким как я.