crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> помогите прочитать бинарный файл
menand
  опции профиля:
сообщение 31.1.2012, 15:28
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 31.1.2012
Пользователь №: 3171

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть файл.

в начале 8 байт - текста (ascii), затем float64 число, затем int32 число, затем массив float32 длинна которого - в int32 числе (которое только что считали) (ну и т.д., дальше уже по аналогии разберусь).

Собственно вопрос - как отрыть такой файл и читать с него данные? Тоесть может ли кто-нибудь привести пример чтения:

1) 8 байт текста
2) флоат64
3) инт32
4) for(int i=0;i<N;i++) читать флоат32

ЗЫ программа должна быть кросс-платформленной.. тоесть длинну типов надо както явно задавать..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 1.2.2012, 6:38
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(menand @ 31.1.2012, 18:28) *
1) 8 байт текста
2) флоат64
3) инт32
4) for(int i=0;i<N;i++) читать флоат32


если файл ты создаёшь сам, то сразу лучше перейди на использование XML

а данную кашу можно разобрать так:

//1) 8 байт текста
//2) флоат64
//3) инт32
#pragma pack(push,1)
struct s_header
{
  char8 text[8];
  float64 n1;
  int32 n2;
};
#pragma pack(pop)


читаем sizeof(s_header) в переменную типа s_header

s_header h;
read(&h,sizeof(h));


оттуда узнаём, видимо, длину массива -> N

затем читаем sizeof(float64) * N байтов

std::vector<float64> v(N,0);
read(&v[0],v.size());
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 12:03