2009-10-06 18 views
5

आप फ़ाइल में बाइनरी डेटा कैसे लिखते हैं? मैं एक फाइल, कच्चे, और फिर फ्लोट के रूप में उन्हें वापस पढ़ने के लिए तैरना लिखना चाहता हूँ। आप उसे कैसे करते हैं?आईफोन लेखन बाइनरी डेटा

उत्तर

6

इस पर प्रयोग कर रहे:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSString *file = [documentsDirectory stringByAppendingPathComponent:@"binaryData"]; 

float b = 32.0f; 

NSMutableData *data = [NSMutableData dataWithLength:sizeof(float)]; 
[data appendBytes:&b length:sizeof(float)]; 
[data writeToFile:file atomically:YES]; 

NSData *read = [NSData dataWithContentsOfFile:file]; 
float b2; 
NSRange test = {0,4}; 
[read getBytes:&b2 range:test]; 

अजीब बात यह है कि लिखित फ़ाइल 8 बाइट्स और नहीं 4. होने के लिए यह 0 लंबाई के साथ nsdata init करने के लिए भी संभव है, एक नाव संलग्न करें और तब लगता है लिखें, और फिर फ़ाइल 4 बाइट्स होगी। NSData डिफ़ॉल्ट रूप से 4 बाइट क्यों जोड़ रहा है? लंबाई 4 के साथ एक एनएसडाटा के परिणामस्वरूप लंबाई 4 के साथ फ़ाइल होनी चाहिए, न कि 8.

+0

आप एक हेक्स संपादक का उपयोग कर सकते हैं जब यह 8 बाइट्स है फ़ाइल की सामग्री की जांच के लिए? मुझे लगता है कि आप यह चुनने में सक्षम होना चाहिए कि कौन सा 4 आपकी फ्लोट है और दूसरा 4 आपको गलत होने के कारण एक सुराग दे सकता है। – Tim

+0

दरअसल। अंतिम 4 फ्लोट है। फ़ाइल इस तरह दिखती है: 00 00 00 00 00 00 00 42 – quano

+0

स्पष्ट रूप से एक एनएसएमयूटेबलडेटा को लंबाई के साथ जोड़कर यह उस लंबाई को अपने डेटा में जोड़ना और बाद में अंतरिक्ष को इंगित करना है। लंबाई 0 के साथ इसे हल करना समाधान है। फिर कोई खुद से पूछ सकता है कि कोई इसे 0 से किसी भी अन्य लंबाई के साथ क्यों नहीं लेना चाहता। – quano

3

ध्यान दें कि उद्देश्य-सी केवल सी प्रोग्रामिंग भाषा का विस्तार है।

मैं आमतौर पर एक NSFileHandle बनाने और उसके बाद बाइनरी डेटा इस तरह से लिखें:

NSFileHandle handle*; 
float f; 

write([handle fileDescriptor], &f, sizeof(float)); 
संबंधित मुद्दे