Pregunta

Necesito leer exactamente 32 bits desde un archivo. Estoy usando ifstream en el STL. ¿Puedo decir directamente:

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;

... o necesito para anular alguna manera el operador >> para trabajar con int32? No veo la int32 que aparece aquí: http://www.cplusplus.com/reference/iostream/istream / operador% 3E% 3E /

¿Fue útil?

Solución

El operador de extracción de flujo (>>) realiza con formato IO, IO no binario. Tendrá que utilizar std::istream::read lugar. También tendrá que abrir el archivo como binary. Ah, y la comprobación std::istream::eof es redundante en el código.

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.

Tenga en cuenta que haciendo esto se va a introducir la dependencia de la plataforma en su código, ya que el orden de bytes en un entero es diferente en diferentes plataformas.

Otros consejos

int32 será un typedef para cualquier tipo pasa a ser un entero de 32 bits en su plataforma. Ese tipo subyacente sin duda se habrá operator>> sobrecargada por ello.

Actualizar

Como Billy señala más adelante, las corrientes están diseñados para leer y analizar el texto en el tipo de datos sobrecargados. Así que en su ejemplo de código, que estará en busca de una secuencia de caracteres numéricos. Por lo tanto, no va a leer 32 bits de su archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top