C语言中的fwrite()
函数使用const void *restrict buffer
作为第一个参数,因此您可以直接将指向struct
的指针作为第一个参数传递。
http://en.cppreference.com/w/c/io/fwrite
例如:fwrite(&someStruct, sizeof(someStruct), 1, file);
但是在C++中,ostream::write()
需要const char_type*
,这就迫使您使用reinterpret_cast
。(在Visual Studio 2013中,它是const char*
。)
http://en.cppreference.com/w/cpp/io/basic_ostream/write
例如:file.write(reinterpret_cast<char*>(&someStruct), sizeof(someStruct));
在几乎所有情况下,要写入文件的二进制数据不是char
数组,那么为什么标准更喜欢看起来更复杂的风格呢?
P.S.
1. 实际上我使用了ofstream
中的write()
方法,并采用ios::binary
模式,但是根据参考资料,它继承自ofstream
。所以我在上面使用了ostream::write()
。
2. 如果您想打印一串字符流,可以使用operator<<()
。
3. 如果write()
不是写入二进制数据的方法,那么标准中有什么方法来实现呢?(尽管由于不同平台上的各种内存对齐策略,这可能会影响代码的可移植性)
char
数组。 - n. m.unsigned char
数组 - 一种用于保存二进制数据的类型,您不能将其写入fstream
而不使用 reinterpret_cast。而 clang-tidy 和其他 linters 也会因此而报错。 - Calmarius