En fait, un "code à quatre caractères" est habituellement un non signé valeur 32 bits:
public typealias FourCharCode = UInt32
public typealias OSType = FourCharCode
Les quatre octets (du MSB au LSB) définissent chacun un caractère. est ici d'un simple Swift 3 fonction pour convertir le nombre entier en une chaîne, inspirée par les divers C/Objective-C/Swift 1 + 2 solutions dans iOS/C: Convert "integer" into four character string:
func fourCCToString(_ value: FourCharCode) -> String {
let utf16 = [
UInt16((value >> 24) & 0xFF),
UInt16((value >> 16) & 0xFF),
UInt16((value >> 8) & 0xFF),
UInt16((value & 0xFF)) ]
return String(utf16CodeUnits: utf16, count: 4)
}
Exemple:
print(fourCCToString(0x48454C4F)) // HELO
J'ai choisi un tableau avec les points de code UTF-16 comme stockage intermédiaire car cela peut directement être utilisé pour créer une chaîne.
Si vous avez vraiment besoin pour un signé entier 32 bits alors vous pouvez appel
fourCCToString(FourCharCode(bitPattern: i32value)
ou définir une fonction similaire en prenant un paramètre Int32
.
Comme Tim Vermeulen a suggéré ci-dessous, le tableau UTF-16 peut également être créé avec map
:
let utf16 = stride(from: 24, through: 0, by: -8).map {
UInt16((value >> $0) & 0xFF)
}
ou
let utf16 = [24, 16, 8, 0].map { UInt16((value >> $0) & 0xFF) }
À moins que la fonction est la performance critique pour votre application, choix ce que vous vous sentez le plus familier (autrement mesurer et comparer).
Possible dupliquer de [Comment convertir rapidement Int16 en deux UInt8 octets] (http://stackoverflow.com/questions/32830866/how-in-swift-to-convert-int16-to-two-uint8-bytes – BallpointBen
Avez-vous essayé 'NSFileTypeForHFSTypeCode'? Malgré son nom, il peut convertir n'importe quel code 4-char de 'OSType' à' String' –
@CodeDifferent: Ce n'est pas disponible sur iOS. –