2014-03-04 46 views
2

我有下面的C#代码:为什么C++读取的字节结果与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回报0x00b回报0x03

但在我的C++代码:

std::ifstream ifs("output.bin", std::ios::binary);; 
char buf1[2]; 
ifs.read(buf1, 2); 

buf1[0]回报-52buf1[1]回报-52

我的代码有什么问题?

+1

也许它是一个*不同的* output.bin文件?什么是十六进制转储(使用编辑器,而不是两种语言)显示? – user2864740

+1

output.bin中前2个字节的内容是什么? – Raptor

+0

在C++代码中,在read()调用之后ifs.gcount()会返回什么? – sj0h

回答

4

您需要在创建之后和读取之后检查C++代码中的流的状态,以确保操作成功。即在创建流之后,在读取它之后,请参阅if (ifs) {...}。如果任一操作失败,那么在您刚刚从buf1读取未初始化/未定义的数据后。

请参阅http://www.cplusplus.com/reference/istream/istream/read/了解如何正确使用ifstream的示例。

+0

感谢您的回答。因为我对C++非常陌生,所以我认为如果读取不存在的文件会给我一个错误。原因是文件的位置。 –

相关问题