从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
When reading from a binary stream, what does it mean to cast the address of a double variable to a char*?
我有以下来自在线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*
是如何工作的呢?
流中的信息以字节序列(char
s(的形式呈现。
您希望将该信息读入变量minimum
和maximum
中,它们是double
s。
您假定您正在读取的字节构成了系统上double
的有效字节表示形式。
您将double
"别名"为字节序列(这是标准中允许的特殊规则;通常你不能只是假装某些东西是别的东西(,然后将结果char*
提供给流的"读取"函数。
流的"read"函数认为它被要求将数据放入char
数组中,因为这就是char*
的样子,因为这就是函数的设计目的。
因此,字节序列由"read"函数复制到您的double
中。
write
函数也是如此。我们假装流给它一个字节序列(一个char
数组(来写入,我们被允许这样做,因为这从根本上就是double
,在这一切之下。
其次,如果 minimum 是一个 int,大概我们会编写相同的代码(至少,就 (char*(&minimum( 而言(,那么 &someIntVariable 也可以转换为 char* 是如何工作的呢?
因为int
也由字节序列表示。
每个对象都是。
相关文章:
- 已转换对象的地址
- 右值引用转换后的地址更改
- 无法将内存地址转换为值
- C++ 将地址保存为字符串的向量转换为新的向量
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 将Wiimote MAC地址转换为PIN码,从C++转换为Python或Javascript
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- 将函数的地址转换为UINTPTR_T给我不正确的结果
- 将字节数组转换为地址
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 如何将C++ ulong 4 字节 IP 地址正确转换为 C# 类型
- 从十六进制转换为LPCVoid,切断了一半地址
- 无法将主机名"localhost"转换为地址:未知服务器错误
- 地址清理器在静态强制转换无效指针时报告错误
- C++ Arduino:向下转换后,子字段不引用原始地址
- 将对象强制转换为 dlsym 返回的地址
- 获取字符数组地址,然后转换为指针字符
- 如何将字符串转换为地址
- (C++内存编辑)将"THREADSTACK0"转换为地址