将unsigned int转换为byte数组并返回

时间:2016-03-08 16:29:55

标签: c++ io binaryfiles

对于我的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);
}

提前感谢您提供任何帮助。

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];