对于我的C ++个人项目,我一直在研究如何在二进制文件中保存一些数据。我做了一些关于谷歌的研究,发现了一些这样做的方法,或多或少都归结为同样的事情。但是,我不能为我的生活得到读或写方法正常工作。我写的任何价值,我都会以不同的方式回归。我已经广泛搜索了这个并浏览了StackOverflow并且我没有真正找到解决方案,所以我开始认为我必须忽略某些东西,但我不能为我的生活做好准备。弄清楚是什么。
以下两种方法用于读写无符号短文。
unsigned short ReadUShort(std::ifstream& ifs)
{
unsigned char buffer[2];
ifs.read((char*)buffer, 2);
unsigned short val = (buffer[0] << 8) | buffer[1];
return val;
}
void WriteUShort(std::ofstream& ofs, unsigned short val)
{
unsigned char buffer[2];
buffer[0] = (val & 0xff);
buffer[1] = ((val >> 8) & 0xff);
ofs.write((char*)buffer, 2);
}
提前感谢您提供任何帮助。
答案 0 :(得分:1)
您的read
例程以big-endian顺序读取(最重要的字节优先),而write
例程以little-endian顺序写入(最低有效字节优先)。你必须选择其中一个。
大端实现:
unsigned short ReadUShort(std::ifstream& ifs)
{
unsigned char buffer[2];
ifs.read((char*)buffer, 2);
unsigned short val = (buffer[0] << 8) | buffer[1];
return val;
}
void WriteUShort(std::ofstream& ofs, unsigned short val)
{
unsigned char buffer[2];
//SWAPPED FROM LITTLE-ENDIAN TO BIG-ENDIAN
buffer[0] = ((val >> 8) & 0xff);
buffer[1] = (val & 0xff);
ofs.write((char*)buffer, 2);
}
答案 1 :(得分:1)
你反过来了。在阅读期间尝试这个:
unsigned short val = ((unsigned short)buffer[1] << 8) | buffer[0];