【发布时间】:2011-04-22 10:42:04
【问题描述】:
以二进制模式打开的文件,第一个变体给出异常,第二个没有。 如何使用 ifstream 直接读取我的 mhead 对象?请帮我。 这是我的代码:
class mhead {
public:
long length;
void readlong(std::ifstream *fp);
}
void mhead::readlong(std::ifstream *fp)
{
//this one is not work
fp->read((char*)this->length,sizeof(this->length));
//this is working
long other;
fp->read((char*)other,sizeof(other));
}
}
【问题讨论】:
-
似乎您正在写入内存中的某个随机位置。只是运气,您的第二个变体正在工作。试试 fp-read(&this->length, sizeof(length))。
-
@Alexander:这种方法似乎不是一个好主意。您一定会偶然发现依赖于编译器实现的差异。如果您想以可移植且安全的方式进行序列化,请考虑使用Boost.Serialization。
-
@Space_C0wb0y 我并不是要无礼,但将他介绍给
Boost就像拿走他的弹弓(这样他就不会伤害自己)并给他一门大炮。 -
@cnicutar:实际上,将他介绍给 Boost 是给他一个起点,他可以从中学习如何编写好的 C++。 Boost 文档中的大多数示例都是非常好的示例。
标签: c++