2012-08-08 150 views
0

大家好,同时读取从二进制文件的二进制数据如下,我有一个问题:ifstream的读取二进制数据的问题为0x00字节

文件内容: 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个字节。无论如何,我想遍历整个字节数组来检查字节值。

非常感谢。

+3

通常的答复“你为什么不使用'VECTOR'?” (我很肯定'sizeof(afpContentBlock)/ sizeof(afpContentBlock [0])'不是7,而是4或8)。 – 2012-08-08 11:01:19

+0

我已经修复了文件内容(这是错误的)。一段代码真的会有帮助和赞赏,因为我真的还没有使用矢量。 – 2012-08-08 12:11:54

回答

2

它很容易,只是让你从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] 
    } 
} 
+0

ifstream.read函数不返回一个int值。 – 2012-08-08 12:08:52

+0

@Duncan_McCloud你是对的,编辑来解决这个问题。过了一会儿哈哈。 – steveg89 2012-08-08 12:13:30