【发布时间】:2014-10-24 22:24:32
【问题描述】:
我来自this question,我想将 2 个整数写入一个字节,保证在 0-16 之间(每个 4 位)。
现在,如果我关闭文件,然后运行另一个程序,读取....
for (int i = 0; i < 2; ++i)
{
char byteToRead;
file.seekg(i, std::ios::beg);
file.read(&byteToRead, sizeof(char));
bool correct = file.bad();
unsigned int num1 = (byteToRead >> 4);
unsigned int num2 = (byteToRead & 0x0F);
}
问题是,有时这可行,但有时我的第一个数字是负数,而第二个数字一直是 10 或 9,而且它们肯定不是我写的数字!
因此,例如,前两个数字有效,但下一个数字无效。例如,上面读取的输出将是:
At byte 0, num1 = 5 and num2 = 6
At byte 1, num1 = 4294967289 and num2 = 12
在字节 1,num1 应该是 9。看起来 12 写得很好,但 9 byteToWrite -100 'œ'' 我检查了this question,我认为它有类似的问题,但我觉得我的字节序就在这里。
【问题讨论】:
-
您正在阅读
byteToRead,但正在从myNums构建数字。 -
问题写错了,谢谢
-
您可能还想在执行此操作时使用无符号数字,以避免在移动它们时使用符号扩展。
-
你为什么使用
seekp(i/2)? -
在使用位操作时需要使用
unsigned整数,尤其是右移。
标签: c++ fstream binaryfiles bit-shift