我正在尝试学习二进制文件的工作原理。当我输入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之间存储一些值作为二进制并回读 如果我访问某个文件有什么方法可以找到它的大小并根据大小读取数据,我怎样才能获得文件大小。我只知道上面代码中的一种方式,我不知道我做得对不对 如果我错了,请纠正我
答案 0 :(得分:1)
问题是在阅读时,该值被视为签名或否定。您需要使用: -
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
。
因此,我们将其视为char
,然后将其重新解释为unsigned char
。
最后将C cast (int)
替换为C ++强制转换static_cast
以获得整数值(已签名但正面)。
当读取超出最后一个元素时,还需要进行检查以确保缓冲区不会溢出