web-dev-qa-db-fra.com

convertir NSData Length d'octets en megs

J'essaie de NSLog le nombre de mégaoctets de mon NSData objet est cependant actuellement tout ce que je peux obtenir est octets en utilisant

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

Alors, comment pourrais-je changer cette instruction NSLog pour que je puisse voir quelque chose comme

2,00 mégaoctets

toute aide serait appréciée.

36
HurkNburkS

Il y a 1024 octets dans un kilo-octet et 1024 kilo-octets dans un mégaoctet, donc ...

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

Attention, il s'agit d'une approche simpliste qui ne pouvait pas vraiment convenir aux tailles d'octets inférieures à 1 048 576 octets ou supérieures à 1 073 741 823 octets. Pour une solution plus complète qui peut gérer différentes tailles de fichiers, voir: classe ObjC/Cocoa pour convertir la taille en chaîne lisible par l'homme?

Ou pour OS X 10.8+ et iOS 6+

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

Dans Swift:

print(ByteCountFormatter().string(fromByteCount: Int64(data.count)))
118
Mick MacCallum

Pour Swift 3, en Mo:

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

print("File size: \(fileSize)")
15
Ber.to

Avec Swift 5.1 et iOS 13, vous pouvez utiliser l'une des 5 façons suivantes pour résoudre votre problème.


#1. Utilisation de la méthode de classe ByteCountFormatterstring(fromByteCount:countStyle:)

L'exemple de code suivant montre comment implémenter string(fromByteCount:countStyle:) afin d'imprimer une taille de fichier en automatiquement en convertissant les octets en une unité de stockage plus appropriée ( par exemple mégaoctets):

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. Utilisation de la méthode string(fromByteCount:) de ByteCountFormatter

L'exemple de code suivant montre comment implémenter ByteCountFormatterstring(fromByteCount:) afin d'imprimer une taille de fichier en manuellement en convertissant octets en mégaoctets:

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. Utilisation de la méthode de classe ByteCountFormatterstring(from:countStyle:) et Measurement

L'exemple de code suivant montre comment implémenter string(from:countStyle:) afin d'imprimer une taille de fichier en automatiquement en convertissant les octets en une unité de stockage plus appropriée ( par exemple mégaoctets):

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. En utilisant la méthode string(from:) de ByteCountFormatter et Measurement

L'exemple de code suivant montre comment implémenter string(from:) et ByteCountFormatter et Measurement afin d'imprimer une taille de fichier manuellement par conversion d'octets en mégaoctets:

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. En utilisant la méthode string(from:) de MeasurementFormatter et Measurement

L'exemple de code suivant montre comment implémenter Measurement et MeasurementFormatterstring(from:) afin d'imprimer une taille de fichier par manuellement conversion d'octets en mégaoctets:

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
0
Imanou Petit