2009-10-06 71 views
5

如何將二進制數據寫入文件?我想寫浮動到一個文件,原始,然後讀取它們作爲浮動。你是怎樣做的?iPhone寫入二進制數據

回答

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的甚至有可能,追加浮動,然後寫入,然後文件將是4個字節。爲什麼NSData默認添加4個字節?一個長度爲4的NSData應該產生長度爲4而不是8的文件。

+0

你可以使用十六進制編輯器來檢查文件的內容時,它具有8個字節?在我看來,你應該能夠挑出哪一個是你的浮球,其他四個可能會給你一個線索,看看哪裏出了問題。 – Tim 2009-10-06 16:46:24

+0

確實。最後4個是浮動。該文件如下所示:00 00 00 00 00 00 00 42 – quano 2009-10-06 16:53:53

+0

顯然,使用長度來初始化一個NSMutableData會導致它將該長度附加到其數據並指向該空間。用長度爲0的方式引入它就是解決方案。然後人們可以問自己爲什麼要用任何其他長度爲0以上的長度來初始化它。 – quano 2009-10-06 19:49:11

3

請注意,Objective-C只是C編程語言的擴展。

我通常會創建一個NSFileHandle然後寫二進制數據是這樣的:

NSFileHandle handle*; 
float f; 

write([handle fileDescriptor], &f, sizeof(float));