2014-03-04 74 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++非常陌生,所以我認爲如果讀取不存在的文件會給我一個錯誤。原因是文件的位置。 –

相關問題