Конвертировать NSData Длина от байт до мега
Я пытаюсь NSLog
указать число мега объектов my NSData
, но в настоящее время все, что я могу получить, это байты с помощью
NSLog(@"%u", myData.length);
Итак, как бы изменить этот оператор NSLog
, чтобы я мог видеть что-то вроде
2.00 megs
любая помощь будет оценена.
Ответы
Ответ 1
Есть 1024 байта в килобайте и 1024 килобайта в мегабайте, так что...
NSLog(@"File size is : %.2f MB",(float)myData.length/1024.0f/1024.0f);
Имейте в виду, что это упрощенный подход, который на самом деле не может должным образом приспособиться для байтов размером менее 1 048 576 байт или более 1 073 741 823 байт. Для более полного решения, которое может обрабатывать файлы разного размера, см.: Класс ObjC/Cocoa для преобразования размера в удобочитаемую строку?
Или для OS X 10. 8+ и iOS 6+
NSLog(@"%@", [[NSByteCountFormatter new] stringFromByteCount:data.length]);
В Свифте:
print(ByteCountFormatter().string(fromByteCount: Int64(data.count)))
Ответ 2
Для Swift 3, в Mb:
let countBytes = ByteCountFormatter()
countBytes.allowedUnits = [.useMB]
countBytes.countStyle = .file
let fileSize = countBytes.string(fromByteCount: Int64(dataToMeasure!.count))
print("File size: \(fileSize)")
Ответ 3
С Swift 5.1 и iOS 13 вы можете использовать один из 5 следующих способов решения вашей проблемы.
В следующем примере кода показано, как реализовать string(fromByteCount:countStyle:)
для печати размера файла путем автоматического преобразования байтов в более подходящую единицу хранения (например, мегабайты):
import Foundation
let url = Bundle.main.url(forResource: "image", withExtension: "png")!
let data = try! Data(contentsOf: url)
let byteCount = data.count
print(byteCount) // prints: 2636725
let displaySize = ByteCountFormatter.string(fromByteCount: Int64(byteCount), countStyle: .file)
print(displaySize) // prints: 2.6 MB
В следующем примере кода показано, как реализовать string(fromByteCount:)
ByteCountFormatter
string(fromByteCount:)
для печати размера файла путем ручного преобразования байтов в мегабайты:
import Foundation
let url = Bundle.main.url(forResource: "image", withExtension: "png")!
let data = try! Data(contentsOf: url)
let byteCount = data.count
print(byteCount) // prints: 2636725
let formatter = ByteCountFormatter()
formatter.allowedUnits = [.useMB]
formatter.countStyle = .file
let displaySize = formatter.string(fromByteCount: Int64(byteCount))
print(displaySize) // prints: 2.6 MB
В следующем примере кода показано, как реализовать string(from:countStyle:)
для печати размера файла путем автоматического преобразования байтов в более подходящую единицу хранения (например, мегабайты):
import Foundation
let url = Bundle.main.url(forResource: "image", withExtension: "png")!
let data = try! Data(contentsOf: url)
let byteCount = data.count
print(byteCount) // prints: 2636725
let byteSize = Measurement(value: Double(byteCount), unit: UnitInformationStorage.bytes)
let displaySize = ByteCountFormatter.string(from: byteSize, countStyle: .file)
print(displaySize) // prints: 2.6 MB
В следующем примере кода показано, как реализовать string(from:)
ByteCountFormatter
string(from:)
и Measurement
для печати размера файла путем ручного преобразования байтов в мегабайты:
import Foundation
let url = Bundle.main.url(forResource: "image", withExtension: "png")!
let data = try! Data(contentsOf: url)
let byteCount = data.count
print(byteCount) // prints: 2636725
let byteSize = Measurement(value: Double(byteCount), unit: UnitInformationStorage.bytes)
let formatter = ByteCountFormatter()
formatter.allowedUnits = [.useMB]
formatter.countStyle = .file
let displaySize = formatter.string(from: byteSize)
print(displaySize) // prints: 2.6 MB
# 5. Использование string(from:)
MeasurementFormatter
string(from:)
метода Measurement
В следующем примере кода показано, как реализовать string(from:)
Measurement
and MeasurementFormatter
string(from:)
для печати размера файла путем ручного преобразования байтов в мегабайты:
import Foundation
let url = Bundle.main.url(forResource: "image", withExtension: "png")!
let data = try! Data(contentsOf: url)
let byteCount = data.count
print(byteCount) // prints: 2636725
let byteSize = Measurement(value: Double(byteCount), unit: UnitInformationStorage.bytes)
let convertedSize = byteSize.converted(to: .megabytes)
let formatter = MeasurementFormatter()
let displaySize = formatter.string(from: convertedSize)
print(displaySize) // prints: 2.637 MB