Escribir bytes de size_t a archivo binario

votos
-2
size_t x = 123;

std::ofstream myFile(myfile.bin, std::ios::out | std::ios::binary);

myFile.write(reinterpret_cast<char*>( &static_cast<uint64_t>(x) ),8); 

myFile.close()

Quiero escribir los bytes de un size_ta un archivo mediante la promoción de primero a un 64 bits sin signo. Lo anterior illusrates lo que quiero hacer, pero no funciona. ¿Puedo hacer esto sin la asignación de un valor temporal para x?

Publicado el 07/11/2018 a las 22:33
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
3

Es posible que desee algo así como:

uint64_t u64 = x;
myfile.write ((const char *) &u64, sizeof (u64));

No se puede escapar sin asignar X a un temporal, pero por otra parte, ¿por qué es un problema?

Respondida el 07/11/2018 a las 22:39
fuente por usuario

votos
2

No se puede tomar la dirección de un temporal. Para mayor comodidad, probablemente hacer una función para esto. Utilizando una función significa crear un parámetro y que puede tomar la dirección de un parámetro.

Algo un poco como esto:

template<typename POD>
std::ostream& write_pod(std::ostream& os, POD const& pod)
{
    // make sure we're not trying to write a complex object this way
    static_assert(std::is_pod<POD>::value, "must be plain old data");

    return os.write(reinterpret_cast<char const*>(pod), sizeof(pod));
}

int main()
{
    std::size_t x = 123;

    std::ofstream myFile("myfile.bin", std::ios::binary);

    write_pod(myFile, std::uint64_t(x));

    // ...
}
Respondida el 07/11/2018 a las 23:39
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more