Подтвердить что ты не робот

Конвертировать NSData Длина от байт до мега

Я пытаюсь NSLog указать число мега объектов my NSData, но в настоящее время все, что я могу получить, это байты с помощью

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

Итак, как бы изменить этот оператор NSLog, чтобы я мог видеть что-то вроде

2.00 megs

любая помощь будет оценена.

4b9b3361

Ответ 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 следующих способов решения вашей проблемы.


# 1. Использование string(fromByteCount:countStyle:) ByteCountFormatter string(fromByteCount:countStyle:) метод класса string(fromByteCount:countStyle:)

В следующем примере кода показано, как реализовать 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

# 2. Используя ByteCountFormatter string(fromByteCount:) метод

В следующем примере кода показано, как реализовать 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

# 3. Использование string(from:countStyle:) ByteCountFormatter string(from:countStyle:) класса string(from:countStyle:) и Measurement

В следующем примере кода показано, как реализовать 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

# 4. Использование string(from:) ByteCountFormatter string(from:) метод string(from:) и Measurement

В следующем примере кода показано, как реализовать 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