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分配临时值的情况下执行此操作吗?
答案 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));
// ...
}