这是代码
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
ofstream out("test", ios::out | ios::binary);
if(!out) {
cout << "Cannot open output file.\n";
return 1;
}
double num = 100.45;
char str[] = "www.java2s.com";
out.write((char *) &num, sizeof(double));
out.write(str, strlen(str));
out.close();
return 0;
}
我不理解这个
out.write((char *) &num, sizeof(double));
为什么我们需要(char *)&num?
或sizeof(double)?
答案 0 :(得分:3)
write
有两个参数,char*
和长度。
&num
实际上是double*
。这是我们想要的值,但它是错误的类型,编译器会抱怨。 (char*)
告诉编译器将其视为char*
。基本上,它对编译器说“关闭。我知道我在做什么”。
sizeof(double)
是双字符的大小。 (通常,这是8)。
他们一起说要从&amp; num给出的地址开始写8个字节。 (或换句话说,写出构成num的字节)
答案 1 :(得分:1)
您需要它们,因为您正在访问构成double
的组件字节。 write
预计会收到char *
,因此您将地址转换为char *
。因为它不知道正在写入的对象的类型(使用正确的强制转换,write
将接受几乎任何东西的指针),所以你需要告诉它要写入要写入的对象的字节数。 / p>