【问题标题】:ifstream read binary data issue 0x00 byteifstream 读取二进制数据发出 0x00 字节
【发布时间】:2012-08-08 10:59:41
【问题描述】:

大家好,我在从二进制文件中读取二进制数据时遇到如下问题:

文件内容: D3 EE EE 00 00 01 D7 C4 D9 40

char * afpContentBlock = new char[10];
ifstream inputStream(sInputFile, ios::in|ios::binary);

if (inputStream.is_open()))
{
    inputStream.read(afpContentBlock, 10);

    int n = sizeof(afpContentBlock)/sizeof(afpContentBlock[0]); // Print 4

    // Here i would like to check every byte, but no matter how i convert the 
    // char[] afpContentBlock, it always cut at first byte 0x00.
}

我知道这是字节 0x00 的原因。有没有办法以某种方式管理它? 我试图用一个 ofstream 对象来写它,它工作得很好,因为它写出了整个 10 个字节。无论如何,我想遍历整个字节数组来检查字节值。

非常感谢。

【问题讨论】:

  • 通常的回复是“你为什么不用vector?” (而且我很确定 sizeof(afpContentBlock)/sizeof(afpContentBlock[0]) 不是 7,而是 4 或 8)。
  • 我已经修复了文件内容(它是错误的)。代码 sn-p 真的很有帮助和感激,因为我真的不习惯矢量。

标签: c++ io binary fstream ifstream


【解决方案1】:

像这样获取从 ifstream 读取的字节数要容易得多:

if (inputStream.is_open()))
{
   inputStream.read(afpContentBlock, 10);
   int bytesRead = (int)inputStream.gcount();

   for( int i = 0; i < bytesRead; i++ )
   {
      // check each byte however you want
      // access with afpContentBlock[i]
   }
}

【讨论】:

  • @Duncan_McCloud 你是对的,编辑来解决这个问题。有一段时间了,哈哈。
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2011-07-27
  • 2018-12-04
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多