从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?

When reading from a binary stream, what does it mean to cast the address of a double variable to a char*?

本文关键字:转换 地址 char 什么 意味着 变量 二进制 读取 双精度      更新时间:2023-10-16

我有以下来自在线C++课程的代码:

class tempStat
{
public:
// Data members.
double minimum, maximum;
// Constructor.
tempStat(double min = 0.0, double max = 0.0)
: minimum(min), maximum(max)
{}
// Helper method, to write a tempStat object to a file in binary format.
void write(std::ostream & os)
{
os.write((char*)&minimum, sizeof(double));
os.write((char*)&maximum, sizeof(double));
}
// Helper method, to read a tempStat object from a file in binary format.
void read(std::istream & is)
{
is.read((char*)&minimum, sizeof(double));
is.read((char*)&maximum, sizeof(double));
}
}

此类的使用方式如下:

tempStat ts;
ts.read(ifile);

我的问题是,我们如何将内存地址(&minimum(转换为指向char的指针?

其次,如果minimum是一个int,大概我们会写相同的代码(至少,就(char*)&minimum而言(,那么&someIntVariable也可以转换为char*是如何工作的呢?

流中的信息以字节序列(chars(的形式呈现。

您希望将该信息读入变量minimummaximum中,它们是doubles。

您假定您正在读取的字节构成了系统上double的有效字节表示形式。

您将double"别名"为字节序列(这是标准中允许的特殊规则;通常你不能只是假装某些东西是别的东西(,然后将结果char*提供给流的"读取"函数。

流的"read"函数认为它被要求将数据放入char数组中,因为这就是char*的样子,因为这就是函数的设计目的。

因此,字节序列由"read"函数复制到您的double中。


write函数也是如此。我们假装流给它一个字节序列(一个char数组(来写入,我们被允许这样做,因为这从根本上就是double,在这一切之下。


其次,如果 minimum 是一个 int,大概我们会编写相同的代码(至少,就 (char*(&minimum( 而言(,那么 &someIntVariable 也可以转换为 char* 是如何工作的呢?

因为int也由字节序列表示。

每个对象都是。