将size_t字节写入二进制文件

时间:2018-11-07 22:33:53

标签: c++

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()

我想通过首先将size_t的字节提升为无符号64位来将其写入文件。上面的内容说明了我想做的事情,但没有用。我可以在不为x分配临时值的情况下执行此操作吗?

2 个答案:

答案 0 :(得分:3)

您可能想要类似的东西:

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

如果不将x分配给临时对象,您将无法逃脱,但是再说一遍,为什么这是个问题?

答案 1 :(得分:2)

您不能使用临时地址。为了方便起见,我可能会为此做一个功能。使用函数意味着您可以创建一个参数,然后可以获取参数的地址。

有点像这样:

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));

    // ...
}