【问题标题】:Why is the C++ read bytes result different from C#?为什么 C++ 读取字节结果与 C# 不同?
【发布时间】:2014-03-04 03:27:14
【问题描述】:

我有下面的 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

我的代码有什么问题?

【问题讨论】:

  • 也许它是一个不同的 output.bin 文件?十六进制转储(使用编辑器,而不是任何一种语言)显示什么?
  • output.bin 前 2 个字节的内容是什么?
  • 在C++代码中,ifs.gcount()调用read()后返回什么?
  • @sj0h 它返回 0。我在寻找不存在的文件吗?
  • 0 表示没有读取任何字符,因此 -52 只是垃圾。根据@Ozraptor 的回答,您必须在第 1 行之后检查 ifs 的状态,看看它是否是由于打开失败造成的

标签: c# c++ byte bytearray


【解决方案1】:

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

有关正确使用 ifstream 的示例,请参阅 http://www.cplusplus.com/reference/istream/istream/read/

【讨论】:

  • 感谢您的回答。因为我对 C++ 很陌生,所以我认为如果读取不存在的文件会给我一个错误。原因是文件的位置。
猜你喜欢
  • 2023-03-14
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-28
相关资源
最近更新 更多