Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
#1

Как прочитать из бинарного файла тип НЕ *char - C++

01.05.2012, 13:56. Просмотров 869. Ответов 10
Метки нет (Все метки)

Понимаю, что ответ где-то на поверхности, но я уже задолбался искать. Гугл и все справочники, в которых я читал о функции read, приводят такой пример:
C++
1
2
memblock = new char [size];
file.read (memblock, size);
это все понятно, но как мне считать из бинарного файла значения в переменную, которая не является char'ом??? Никак не могу найти, как это сделать.

Добавлено через 1 минуту
Мне, например, нужно из файла считать структуры, в которых хранятся разные значения типов int, double, char...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2012, 13:56     Как прочитать из бинарного файла тип НЕ *char
Посмотрите здесь:
Как прочитать числа из бинарного файла C++
Как прочитать заголовок бинарного файла в формате TIFF? C++
C++ Не могу прочитать с бинарного файла компонент
Прочитать из бинарного файла в 5 по 8 байты включительно C++
Прочитать из бинарного файла байт номер 0 и отобразить его на дисплее в виде числа C++
Чтение бинарного файла: определить длину кодограммы вместе с заголовком, тип, и смещение C++
C++ Как прочитать переменную const char?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
01.05.2012, 14:05     Как прочитать из бинарного файла тип НЕ *char #2
преобразовать указатель в char*
C++
1
2
data = new some_struct_type;
file.read ((char*)data, sizeof(*data));
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
01.05.2012, 14:13  [ТС]     Как прочитать из бинарного файла тип НЕ *char #3
Цитата Сообщение от grizlik78 Посмотреть сообщение
преобразовать указатель в char*
Как именно это сделать? У меня по вашему коду сделать это не получается((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct scan_info{
    char model[25];
    int price; 
    double x_size; 
    double y_size; 
    int optr; 
    int grey; 
};
 
int main()
{
    ifstream fs (fileName, ios::binary);
    if (!fs.is_open())
    {
        cout << "Error. Unable to open file \"" << fileName << "\"" << endl;
        return;
    }
 
    scan_info scanner;
    fs.read ((char*)scanner,sizeof(scan_info));
    cout << "Model: " << scanner.model << endl;
    cin.get();
    return 0;
}
Происходит ошибка в строке fs.read ((char*)scanner,sizeof(scan_info));
1 IntelliSense: no suitable conversion function from "scan_info" to "char *" exists f:\study\oop\lab14\lab14\lab14\lab14.cpp 89 20 lab14
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
01.05.2012, 14:15     Как прочитать из бинарного файла тип НЕ *char #4
потому что у меня data это указатель.
C++
1
fs.read ((char*)&scanner, sizeof(scan_info));
thick_int
Заблокирован
01.05.2012, 14:21     Как прочитать из бинарного файла тип НЕ *char #5
Вот эту строку
C++
1
fs.read ((char*)scanner,sizeof(scan_info));
замените вот на эту:
C++
1
fs.read (reinterpret_cast<char const*>(scanner),sizeof(scan_info));
Tolias28
205 / 120 / 2
Регистрация: 18.08.2010
Сообщений: 1,011
01.05.2012, 14:25  [ТС]     Как прочитать из бинарного файла тип НЕ *char #6
grizlik78, thick_int, спасибо! оба ваши примеры работают! А какая между ними разница?
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
01.05.2012, 14:34     Как прочитать из бинарного файла тип НЕ *char #7
У меня преобразование в стиле Си, reinterpret_cast лучше показывает намерения программиста. Но ошибка-то у thick_int осталась, reinterpret_cast не сделает из объекта указатель, адрес в любом случае надо брать.
thick_int
Заблокирован
01.05.2012, 14:41     Как прочитать из бинарного файла тип НЕ *char #8
Цитата Сообщение от grizlik78 Посмотреть сообщение
reinterpret_cast не сделает из объекта указатель, адрес в любом случае надо брать.
Все верно, просто забыл поставить амперсанд.
Окончательный вариант такой:
C++
1
fs.read (reinterpret_cast<char const*>(&scanner),sizeof(scan_info));
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
01.05.2012, 14:43     Как прочитать из бинарного файла тип НЕ *char #9
Tolias28, ReadFile
grizlik78
Эксперт С++
1907 / 1439 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
01.05.2012, 14:45     Как прочитать из бинарного файла тип НЕ *char #10
А я вот ещё раз посмотрел, и мне вдруг стало непонятно, зачем там const у указателя? Ведь функция read как раз должна изменять данные по этому указателю. Мой компилятор тоже возмутился.
Так что окончательный вариант тогда такой:
C++
1
fs.read (reinterpret_cast<char*>(&scanner),sizeof(scan_info));
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 15:03     Как прочитать из бинарного файла тип НЕ *char
Еще ссылки по теме:
C++ Как записать и прочитать int (4 byte) из char[]
Не могу преобразовать тип char в тип double C++
Как использовать тип char в конструкции switc-case? C++
C++ Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
C++ Как считать из бинарного файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
thick_int
Заблокирован
01.05.2012, 15:03     Как прочитать из бинарного файла тип НЕ *char #11
А это уже просто перепутал определения аргументов с функцией write.
Только что прочел эту тему (потоковый ввод и вывод в файлы). Естественно, что в голове пока полная каша.
Yandex
Объявления
01.05.2012, 15:03     Как прочитать из бинарного файла тип НЕ *char
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru