Нужно ли определять оператор ">>" для использования cin с Int32? - PullRequest
0 голосов
/ 03 сентября 2010

Мне нужно прочитать ровно 32 бита из файла. Я использую ifstream в STL. Могу ли я прямо сказать:

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ifstream::in);
if (my_stream && !my_stream.eof())
   my_stream >> my_int;

... или мне нужно как-то переопределить оператор >> для работы с int32? Я не вижу int32, перечисленных здесь: http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

Оператор извлечения потока (>>) выполняет форматированный IO, а не двоичный IO.Вам нужно будет использовать std::istream::read вместо этого.Вам также нужно открыть файл как binary.Да, и проверка std::istream::eof избыточна в вашем коде.

int32 my_int;
std::ifstream my_stream;

my_stream.open("my_file.txt",std::ios::in | std::ios::binary);
if (my_stream)
{
    my_stream.read(reinterpret_cast<char*>(&my_int), sizeof(my_int));
}
//Be sure to check my_stream to see if the read succeeded.

Обратите внимание, что выполнение этого приведет к зависимости платформы от вашего кода, потому что порядок байтов в целом числе различен на разных платформах.

2 голосов
/ 03 сентября 2010

int32 будет typedef для любого типа, являющегося 32-битным целым числом со знаком на вашей платформе.Этот базовый тип, безусловно, будет перегружен operator>>.

Обновление

Как указал Билли ниже, потоки предназначены для чтения текста и его разбора в перегруженномтип данных.Так что в вашем примере кода, он будет искать последовательность числовых символов.Следовательно, он не будет читать 32 бита из вашего файла.

...