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

reinterpret_cast - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 75, средняя оценка - 4.76
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
11.03.2011, 15:33     reinterpret_cast #1
Подскажите плиз, чем отличается функция reinterpret_cast от static_cast?
небольшой пример:
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
25
const int MAX = 100;       // размер буфера
int buff[MAX];             // буфер для целых чисел
 
int main()
{
  for(int j=0; j<MAX; j++) // заполнить буфер данными
    buff[j] = j;           // (0, 1, 2, ...)
                           // создать выходной поток
  ofstream os("edata.dat", ios::binary);
                           // записать в него
  os.write(reinterpret_cast<char*>(buff), MAX*sizeof(int) );
  os.close();              // должен закрыть его
 
  for(j=0; j<MAX; j++)     // стереть буфер
    buff[j] = 0;
                           // создать входной поток
  ifstream is("edata.dat", ios::binary);
                           // читать из него
  is.read( reinterpret_cast<char*>(buff), MAX*sizeof(int) );
 
  for(j=0; j<MAX; j++)     // проверка данных
    if( buff[j] != j )
      { cerr << "Некорректные данные!\n"; return 1; }
  cout << "Данные корректны\n";
}
os.write(reinterpret_cast<char*>(buff), MAX*sizeof(int) );
is.read( reinterpret_cast<char*>(buff), MAX*sizeof(int) );
что тут особенного делают эти функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2011, 15:33     reinterpret_cast
Посмотрите здесь:

reinterpret_cast помогите разобраться C++
C++ reinterpret_cast<...>(...)
Reinterpret_cast C++
C++ Преобразование (reinterpret_cast)
Оператор reinterpret_cast C++
Как работает reinterpret_cast? C++
C++ Не получается reinterpret_cast<uint64_t>
C++ Reinterpret_cast массива структур
Reinterpret_cast <MyType> (void*) C++
По функции reinterpret_cast C++
C++ Reinterpret_cast и указатели
C++ Reinterpret_cast на машином уровне

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
11.03.2011, 15:35     reinterpret_cast #2
dimon1984, reinterpret_cast делает преобразование несовместимых типов
в данном примере он массив int (то бишшь указатель на него) преобразует в указатель на char
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
19.03.2011, 20:37  [ТС]     reinterpret_cast #3
ещё не совсем разобрался. Простите, если глупые вопросы, просто самоучка, неукого спросить про мелочи.
C++
1
2
3
  ofstream os("data.txt");
  for(i=0;i<20;i++)
    os.put((char)i);   //os.put(i);
почему не записывает в файл символы? А только надо os << i;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class person              // класс person
  {
  protected:
    char name[80];        // имя человека
    short age;            // возраст
  public:
    void getData()        // получить данные о человеке
      {
      cout << "Введите имя: "; cin >> name;
      cout << "Введите возраст: "; cin >> age;
      }
  };
///////////////////////////////////////////////////////////
int main()
  {
  person pers;            // создать объект
  pers.getData();         // получить данные
                          // создать объект ofstream
  ofstream outfile("PERSON.DAT", ios::binary);
                          // записать в него
  outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers));  // растолкуйте плиз эту строчку поконкретней
  return 0;
  }
И про запись в файл в бинарном виде (ios::binary) обьясните плиз или дайте ссылку.
Тоесть допустим записывается тип int в файл (к примеру число 5) .
В файле это число будет занимать байт, да? А в случае с бинарной записью что будет?

Добавлено через 7 часов 48 минут
подскажите плиз
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
19.03.2011, 22:34     reinterpret_cast #4
Цитата Сообщение от dimon1984 Посмотреть сообщение
почему не записывает в файл символы? А только надо os << i
дело в том что есть разница между put( (char)0 ) и put( '0' )
когда вы делаете cout << 0 компилятор сам делает преобразование 0 -> '0'
на второй лень отвечать ибо гуглить, там все просто
RAFA91
Заблокирован
09.04.2016, 15:14     reinterpret_cast #5
Цитата Сообщение от dimon1984 Посмотреть сообщение
is.read( reinterpret_cast<char*>(buff), MAX*sizeof(int) );
а зачем этот reinterpret_cast раз так все норм
C++
1
is.read( (char*)(buff), MAX*sizeof(int) );
Yandex
Объявления
09.04.2016, 15:14     reinterpret_cast
Ответ Создать тему
Опции темы

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