【发布时间】:2015-09-25 06:10:45
【问题描述】:
我知道这段代码的作用:将 &x 指向的内存中的内容复制到文件中,大小为 sizeof(double) 字节;读取文件并复制到 &y 指向的内存中,大小为 sizeof(double) 字节。
double x,y;
std::ofstream out( "abc.dat", std::ios::out | std::ios::binary);
out.write( reinterpret_cast<const char*>(&x), sizeof(double));
out.close();
std::ifstream in( "abc.dat", std::ios::in | std::ios::binary);
in.read( reinterpret_cast<char*>(&y), sizeof(double));
in.close();
据我了解,在进行二进制 IO 时,文件和 RAM 之间流动的数据应该是以字节为单位的。然后 &x 地址应该作为字节位置传递:像 out.write( reinterpret_cast(&x), sizeof(double)) 这样的东西是有意义的。但是C++并没有定义字节类型,这里的char*可以理解为字节位置,对吗?我注意到 char 的大小与一个字节相同,它们都是 8 位。
【问题讨论】:
-
回答标题中的问题:是的。
-
char被定义为 1 字节并且能够为任何类型起别名,这就是为什么读写函数使用指向 char 的指针 -
哎呀是类型错误@M.M
-
是的。 char 是“字节”,但似乎 unsigned char 是“更好的字节”
-
谢谢各位,我想我现在明白了。几年前那个糟糕的讲师说 char 相当于 int....这导致了这些恐慌。
标签: c++ file-io binaryfiles