2013-09-05 69 views
5

我有一個二進制文件,a.bin,其中包含768個字節。讀取幾個字節,跳過N個字節,然後再讀取幾個字節。怎麼樣?

我希望把字節16-256,272-512,528-768爲

char data[720] 

我也喜歡事端

ifstream a1; 
a1.open("a.bin", ios::in|ios::binary) 

char tmp[256] 
a1.read(tmp,256) 

然後我做了一些循環和複製tmp目錄邏輯中的數據[720]。但是這看起來很愚蠢。所以我想問問

  1. 我怎樣才能讀取數據到特定的字符位置?

    a1.read(tmp [2],2)//不允許,如何實現這一點?

  2. 如何跳過某一天?

    a1.read(tmp16,16);我可以使用它來跳轉16個字節,並且使用tmp16,但它看起來很難看。

+0

看看[seekg](http://en.cppreference.com/w/cpp/io/basic_istream/seekg) –

回答

3

我相信ignore是要走的路。

你走了。

a1.ignore(16);     // [1] 
a1.read(data, 256-16);   // [2] 
a1.ignore(272-256);    // [3] 
a1.read(&data[256-16], 512-272); // [4] 
// and so on 
  1. 忽略第一個16個字節
  2. 你可以data去這裏,因爲它是第一的地址BYT緩衝區,基本上是一樣的&數據[0]
  3. 跳過下一不需要的字節
  4. 這需要將data[256-16+1]的地址作爲要讀取的緩衝區。普通data[17]只是從那裏取值,而&運營商取其地址。我把256-16放在那裏,因爲這是之前調用中讀取的字節數,我們想要開始閱讀下一個可用空間。從0開始編號就是這樣。
0

要閱讀到某一點你需要給它的地址

a1.read(tmp+2, 2) 

或數組,你可以做

a1.read(&tmp[2], 2) // the & operator is the address of operator 
5

對於第一個問題:

a1.read(&tmp[2], 2); 

將兩個字節讀入tmp[2]tmp[3]

對於第二個問題:

a1.ignore(10); 

跳過10個字節。

相關問題