我正在尝试了解二进制文件的工作原理。当我输入 127 以上的任何内容时,它给了我错误的答案。请解释为什么会发生这种情况..
int x[10] = {124,45,21,35,45,25,26,254,12,32};
fstream BCD("Random.bin", ios::binary | ios::out | ios::trunc);
if (!BCD.is_open()) {
cout << "opps<<";
}
else
{
for (int i = 0; i < 10; i++) {
BCD.put(x[i]);
}
}
BCD.close();
int out[10];
fstream file("Random.bin", ios::binary | ios::in);
char C;
int i = 0;
while (file.good())
{
file.get(C);
out[i] = ( int)C ;
i++;
}
我只想将 0 - 255 之间的一些值存储为二进制并回读,如果我访问某个文件,我如何获得文件大小有没有办法首先找到它的大小并根据大小读取数据。我只知道上面代码中的一种方式,不知道我做得对不对,如果我错了请纠正我
问题是在读取时,该值被视为有符号或负数。您需要使用:-
char C;
int i = 0;
while (file.good())
{
file.get(C);
if( file.good() ){
out[i] = static_cast<int>( static_cast<unsigned char>( C ) );
i++;
}
}
不幸的是,正如我之前认为的那样fstream::get
只需要 char,所以我们需要它是一个char
.
所以我们把它读作 a char
,然后将其重新解释为unsigned char
。
最后将 C 强制转换(int)
为 C++ 强制转换static_cast
以获得整数值(有符号,但为正)。
当读取超出最后一个元素时,还需要进行检查以确保缓冲区不会溢出
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句