2013-09-05 7 views
5

मेरे पास एक बाइनरी फ़ाइल है, a.bin, जिसमें 768 बाइट्स हैं।कई बाइट पढ़ें, एन बाइट्स पर कूदें, और फिर कई बाइट्स फिर से पढ़ें। कैसे?

और मैं बाइट्स 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. मैं एक चार arry के कुछ स्थिति के लिए डेटा को कैसे पढ़ सकते हैं?

    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. 1 16 बाइट्स
  2. उपेक्षा आप, यहाँ data साथ जा सकते हैं कारण यह 1 के पते के बफर के 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); 

0 बाइट्समें दो बाइट पढ़ता हैऔर tmp[3]

दूसरे प्रश्न के लिए:

a1.ignore(10); 

10 बाइट्स को छोड़ देता है।

संबंधित मुद्दे