C++ 二进制输入输出问题

C++ 二进制输入输出问题,c++,c++11,C++,C++11,我正在努力学习二进制文件是如何工作的。当我输入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 { fo

我正在努力学习二进制文件是如何工作的。当我输入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++;
}
intx[10]={124,45,21,35,45,25,26254,12,32};
fstream BCD(“Random.bin”,ios::binary | ios::out | ios::trunc);
如果(!BCD.is_open()){

cout问题在于读取时,该值被视为有符号或负数。您需要使用:-

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++;
    }
}
charc;
int i=0;
while(file.good())
{
file.get(C);
if(file.good()){
out[i]=静态_cast(静态_cast(C));
i++;
}
}
不幸的是,正如我之前所想的那样,
fstream::get
只接受字符,所以我们需要它是一个
char

因此,我们将其读作
字符
,然后将其重新解释为
无符号字符

最后将C Case<代码>(int)<代码>替换为C++ Case<代码> SistaCysCase<代码>,以得到整数值(签名,但为正)。


当读取超过最后一个元素时,还需要进行检查以确保缓冲区未溢出。

“当读取超过最后一个元素时,还需要进行检查以确保缓冲区未溢出”我可以如何做到这一点