2012-12-10 13 views
31

ich NSLog versuche die Anzahl der megs meines NSData Objekt ist jedoch zur Zeit alles, was ich bekommen kann Bytes vonkonvertieren NSData Länge von Bytes zu megs

NSLog(@"%u", myData.length); 

mit Also, wie kann ich die NSLog Aussage ändern, damit ich sehen so etwas wie

2.00 megs

jede mögliche Hilfe würde geschätzt.

+0

Wie würde ich es formatieren, so dass es mit zwei Dezimalstellen nach ihm erscheint. – HurkNburkS

Antwort

111

Es gibt 1024 Bytes in einem Kilobyte und 1024 Kilobyte ein Megabyte, so ...

NSLog(@"File size is : %.2f MB",(float)myData.length/1024.0f/1024.0f); 

Wohlgemerkt, dies ist ein vereinfachenden Ansatz, der nicht wirklich richtig für Bytegrößen unter 1.048.576 Bytes aufnehmen konnte oder über 1.073.741.823 Bytes. Für eine vollständigere Lösung, die unterschiedlichen Dateigrößen geeignet ist, siehe: ObjC/Cocoa class for converting size to human-readable string?

Oder für OS X 10.8+ und iOS 6+

NSLog(@"%@", [[NSByteCountFormatter new] stringFromByteCount:data.length]); 

In Swift:

print(ByteCountFormatter().string(fromByteCount: Int64(data.count))) 
+1

Cool, danke an einen Haufen, der funktioniert hat ... Ich war verwirrt, weil ich dachte, ich müsste Klammern haben, aber das funktionierte perfekt! :) – HurkNburkS

+1

Wenn Sie dies dem Benutzer zeigen müssen, dann verwenden Sie kein String-Format. Verwenden Sie stattdessen NSNumberFormatter. Dies formatiert das für das Gebietsschema des Benutzers. – rmaddy

+0

schnell und hand. Es war hilfreich – Alix

13

für Swift 3, in Mb:

let countBytes = ByteCountFormatter() 
countBytes.allowedUnits = [.useMB] 
countBytes.countStyle = .file 
let fileSize = countBytes.string(fromByteCount: Int64(dataToMeasure!.count)) 

print("File size: \(fileSize)")