Vous pouvez écrire quelque chose comme ceci: (Voir MISES À JOUR)
func convertHexLittleEndianToDeciaml(input:String) -> Int32 {
if let beValue = Int32(input, radix: 16) where input.characters.count == 8 {
return beValue.byteSwapped
} else {
//or `fatalError()` or `return 0` or ...
return Int32.min
}
}
print(convertHexLittleEndianToDeciaml("606d0000")) //->28000
MISE À JOUR
Désolé, mais le code ci-dessus ont une question de trop-plein, se produit avec quelque chose comme "FF010000":
func convertHexLittleEndianToDeciaml(input:String) -> Int32 {
if let beValue = UInt32(input, radix: 16) where input.characters.count == 8 {
return Int32(bitPattern: beValue.byteSwapped)
} else {
//or `fatalError()` or `return 0` or ...
return Int32.min
}
}
MAJ2
Donc, j'ai trouvé que renvoyer un Int32
valide en cas d'erreur peut provoquer un bogue qui ne peut pas être facilement trouvé. Je vous recommande de changer le type de retour à Facultatif et renvoyer zéro dans le cas d'erreur.
func convertHexLittleEndianToDeciaml(input:String) -> Int32? {
guard let beValue = UInt32(input, radix: 16) where input.characters.count == 8 else {
return nil
}
return Int32(bitPattern: beValue.byteSwapped)
}
if let value = convertHexLittleEndianToDeciaml("606d0000") {
print(value) //->28000
} else {
print("Hex format invalid")
}
6d60 est 28 000 en décimal, pas 280. – WMios
Et que retourne-t-il? Montrez-nous votre code et dites-nous où il échoue :) – Losiowaty
Pourquoi votre entrée est-elle une chaîne et non un Int? – Alexander