2012-12-10 30 views
31

Tôi cố gắng để NSLog số megs đối tượng NSData của tôi là tuy nhiên hiện nay tất cả tôi có thể nhận được là byte bằng cách sử dụngchuyển đổi NSData Chiều dài từ byte để megs

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

Vì vậy, làm thế nào tôi có thể thay đổi NSLog tuyên bố này vì vậy tôi có thể thấy một cái gì đó như

2.00 megs

bất kỳ trợ giúp nào sẽ được đánh giá cao.

+0

Tôi định dạng nó sao cho nó xuất hiện với hai chữ số thập phân sau nó. – HurkNburkS

Trả lời

111

Có 1024 byte trong một kilobyte và 1024 kilobytes trong một megabyte, vì vậy ...

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

Tâm trí bạn, đây là một cách tiếp cận đơn giản mà có thể không thực sự đúng phù hợp cho kích thước byte dưới 1.048.576 byte hoặc trên 1.073.741.823 byte. Đối với một giải pháp hoàn chỉnh hơn có thể xử lý khác nhau kích thước tập tin, xem: ObjC/Cocoa class for converting size to human-readable string?

Hoặc cho OS X 10.8+ và iOS 6+

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

Trong Swift:

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

Tuyệt vời, cảm ơn một nhóm làm việc .. Tôi đã nhầm lẫn khi nghĩ rằng mình phải có dấu ngoặc kép, nhưng điều này đã làm việc hoàn hảo! :) – HurkNburkS

+1

Nếu bạn cần hiển thị điều này cho người dùng thì không sử dụng định dạng chuỗi. Thay vào đó, hãy sử dụng NSNumberFormatter. Điều này sẽ định dạng cho ngôn ngữ của người dùng. – rmaddy

+0

nhanh và tay. nó rất hữu ích – Alix

13

cho Swift 3, trong Mb:

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

print("File size: \(fileSize)") 
Các vấn đề liên quan