将无符号 int 转换为字节数组并返回
Converting unsigned int to byte array and back
对于我在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);
}
你把它颠倒过来。在阅读过程中尝试此操作:
unsigned short val = ((unsigned short)buffer[1] << 8) | buffer[0];
相关文章:
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中将整数转换为其数字数组
- 如何将带有不定条目的行读取到数字数组中?
- 对于非常大的输入,缺少和重复 1..n 的数字数组.使用1..n系列特性的解决方案.溢出问题
- 有没有一种方法可以接受数字数组而不接受垃圾值的输入
- 从数字数组中删除重复
- 如何打印给定i和j的数字数组,使得i的所有元素的总和等于j
- 将数字与数字数组进行比较
- 将数字数组保存到Spesific文件中,然后稍后调用
- 从排序的数字数组中返回数字范围的最快方法是什么?
- 如何通过libpq c api插入字节的数组
- 无法让我的代码正确排序用户输入的数字数组(使用递归)
- i2c中的字节指针数组
- 以 C++ 为单位递增 16 字节字符数组
- new[] 一个包含构造函数的字节对象数组没有错,对吧?
- 创建未知长度的字节/字符数组
- 我如何将bitset转换为字节/uint8数组
- C++ <--> C# 修改字节编组数组
- 将m个字节的数组拆分为n个字节的块
- c++到c#:有3个元素的字节指针数组等于什么?