【发布时间】:2011-08-13 20:32:47
【问题描述】:
我正在尝试将文件中的数据块直接读取到结构中,但填充导致读取的数据过多并且数据未对齐。
我必须手动将每个部分读入结构中还是有更简单的方法来做到这一点?
我的代码:
结构
typedef unsigned char byte;
struct Header
{
char ID[10];
int version;
};
struct Vertex //cannot rearrange the order of the members
{
byte flags;
float vertex[3];
char bone;
byte referenceCount;
};
我是如何读取数据的:
std::ifstream in(path.c_str(), std::ifstream::in | std::ifstream::binary);
Header header;
in.read((char*)&header.ID, sizeof(header.ID));
header.ID[9] = '\0';
in.read((char*)&header.version, sizeof(header.version));
std::cout << header.ID << " " << header.version << "\n";
in.read((char*)&NumVertices, sizeof(NumVertices));
std::cout << NumVertices << "\n";
std::vector<Vertex> Vertices(NumVertices);
for(std::vector<Vertex>::iterator it = Vertices.begin(); it != Vertices.end(); ++it)
{
Vertex& v = (*it);
in.read((char*)&v.flags, sizeof(v.flags));
in.read((char*)&v.vertex, sizeof(v.vertex));
in.read((char*)&v.bone, sizeof(v.bone));
in.read((char*)&v.referenceCount, sizeof(v.referenceCount));
}
我尝试这样做:in.read((char*)&Vertices[0], sizeof(Vertices[0]) * NumVertices);,但这会产生不正确的结果,因为我认为是填充。
另外:目前我正在使用 C 样式转换,在这种情况下使用正确的 C++ 转换是什么,或者 C 样式转换可以吗?
【问题讨论】:
-
关于你问题的最后一部分,你可以使用 reinterpret_cast
,这使得它非常明确。 -
这比我最初想象的要多:P