Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2011, 11:58   #1
alvahtin
Новичок
Джуниор
 
Регистрация: 02.04.2011
Сообщений: 2
По умолчанию сохранение массива float в файл

Странные вещи я обнаружил. Если написать код:

Код:
#include "stdafx.h"
#include <iostream>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	float* f = new float[5];

	for (int I = 0; I < 5; I++)
	{
		f[I] = I;
	};
	
	FILE*	stream = fopen("test.dat", "a+");
	fwrite(f + 1, sizeof(float), 4, stream);
	fclose(stream);

	return 0;
}
то будет записано в файл 16 байт данных. Это правильно, это логично, и прочитываются они как надо. А если написать:

Код:
#include "stdafx.h"
#include <iostream>

using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	float* f = new float[5];

	for (int I = 0; I < 5; I++)
	{
		f[I] = I * 0.01;
	};
	
	FILE*	stream = fopen("test.dat", "a+");
	fwrite(f + 1, sizeof(float), 4, stream);
	fclose(stream);

	return 0;
}
Будет записано 18 байт. Откуда берутся дополнительные 2 байта? Как такой файл считать?

Тестовая программа для считывания написана на C#:

Код:
            float f;
            byte[] b = new byte[4];
            int I = 0;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                Stream R = openFileDialog1.OpenFile();
                StreamWriter W = new StreamWriter(openFileDialog1.FileName.Substring(0, openFileDialog1.FileName.Length - 3) + "txt");
                while (R.Position < R.Length)
                {
                    R.Read(b, 0, 4);
                    f = BitConverter.ToSingle(b, 0);
                    W.Write(f);
                    W.Write(" ");
                    I++;
                    I %= (int) numericUpDown1.Value;
                    if (I == 0)
                        W.WriteLine();
                }
                R.Close();
                W.Close();
            }
alvahtin вне форума Ответить с цитированием
Старый 11.10.2011, 12:55   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

По умолчанию файл открывается как текстовый. А надо как двоичный:
Код:
fopen(... "ab+")
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение массива байтов в файл niki2012 Общие вопросы Delphi 4 09.01.2011 03:45
Сохранение массива в файл Дмитрий Стариков Общие вопросы Delphi 7 26.09.2010 19:51
сохранение динамического массива в файл пауэрлифтинг Общие вопросы Delphi 1 07.04.2010 00:02
Сохранение двумерного массива в файл AngelOfDeath Общие вопросы Delphi 5 04.10.2008 09:37
Сохранение массива в файл Artem Общие вопросы Delphi 10 11.12.2007 20:00