为什么C++;读取字节的结果不同于C#?

为什么C++;读取字节的结果不同于C#?,c#,c++,byte,bytearray,C#,C++,Byte,Bytearray,我的C#代码如下: FileStream fs = new FileStream("output.bin", FileMode.Open); BinaryReader _br = new BinaryReader(fs); var a = _br.ReadByte(); var b = _br.ReadByte(); fs.Close(); a返回0x00和b返回0x03 但在我的C++代码中: std::ifstrea

我的C#代码如下:

FileStream fs       = new FileStream("output.bin", FileMode.Open);
BinaryReader _br    = new BinaryReader(fs);
var a               = _br.ReadByte();
var b               = _br.ReadByte();
fs.Close();
a
返回
0x00
b
返回
0x03

但在我的C++代码中:

std::ifstream ifs("output.bin", std::ios::binary);;
char buf1[2];
ifs.read(buf1, 2);
buf1[0]
返回
-52
buf1[1]
返回
-52


<我的代码有什么问题?

你需要在创建后检查C++中的流的状态,并在读取之后确认操作是否成功。Ie
if(ifs){…}
在创建流并读取流之后。如果任一操作失败,则在您刚刚从
buf1
读取未初始化/未定义的数据之后


<>参见使用正确的IFFISH。

< P>在创建后,需要检查C++中的流的状态,并在读取之后确保操作成功。Ie
if(ifs){…}
在创建流并读取流之后。如果任一操作失败,则在您刚刚从
buf1
读取未初始化/未定义的数据之后


有关正确使用ifstream的示例,请参阅。

可能是另一个output.bin文件?十六进制转储(使用编辑器,而不是一种语言)显示什么?OutPut.Bin中的前2个字节的内容是什么?C++代码中,在调用读()之后,IFS.GCONTHER()返回什么?@ SJ0H它返回0。我正在寻找一个不存在的文件吗?0表示没有读取字符,所以-52只是垃圾。根据@OzraptorMaybe的回答,您必须检查第1行之后ifs的状态,以查看是否是由于打开失败造成的,这是另一个output.bin文件吗?十六进制转储(使用编辑器,而不是一种语言)显示什么?OutPut.Bin中的前2个字节的内容是什么?C++代码中,在调用读()之后,IFS.GCONTHER()返回什么?@ SJ0H它返回0。我正在寻找一个不存在的文件吗?0表示没有读取字符,所以-52只是垃圾。根据@OzrapTorHanks的回答,您必须检查第1行之后的ifs状态,以查看是否是由于未能打开导致的。由于我对C++非常陌生,我认为如果读取不存在的文件会给我一个错误。原因是文件的位置。谢谢你的回答。由于我对C++非常陌生,我认为如果读取不存在的文件会给我一个错误。原因是文件的位置。