gpt4 book ai didi

c++ - 将 unsigned int 转换为字节数组并返回

转载 作者:行者123 更新时间:2023-11-30 03:43:48 26 4
gpt4 key购买 nike

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

预先感谢您提供的所有帮助。

最佳答案

您的 read 例程以大端顺序读取(最高有效字节在前),而您的 write 例程以小端顺序写入(最低有效字节在前) ).您必须二选一。

大端实现:

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);
}

关于c++ - 将 unsigned int 转换为字节数组并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35872752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com