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.
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)))
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)")
Avec Swift 5.1 et iOS 13, vous pouvez utiliser l'une des 5 façons suivantes pour résoudre votre problème.
ByteCountFormatter
string(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
string(fromByteCount:)
de ByteCountFormatter
L'exemple de code suivant montre comment implémenter ByteCountFormatter
string(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
ByteCountFormatter
string(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
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
string(from:)
de MeasurementFormatter
et Measurement
L'exemple de code suivant montre comment implémenter Measurement
et MeasurementFormatter
string(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