C++ 二进制输入输出问题
我正在努力学习二进制文件是如何工作的。当我输入127以上的任何内容时,它会给我错误的答案 . 请给我解释一下为什么会发生这种事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
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<代码>,以得到整数值(签名,但为正)。
当读取超过最后一个元素时,还需要进行检查以确保缓冲区未溢出。“当读取超过最后一个元素时,还需要进行检查以确保缓冲区未溢出”我可以如何做到这一点