2016-08-24 5 views
0

J'ai des difficultés à implémenter une fonction de conversion de la valeur hexadécimale (little endian) en valeur décimale.Swift Little hexadécimal Valeur décimale

Je suis fonction écrit:

func convertHexLittleEndianToDeciaml(input:String) -> (int) 

et l'entrée est toujours 4 octets (donc 8 caractères dans la chaîne d'entrée)

valeur

pour convertHexLittleEndianToDeciaml("606d0000") devrait retourner 28,000

+2

6d60 est 28 000 en décimal, pas 280. – WMios

+1

Et que retourne-t-il? Montrez-nous votre code et dites-nous où il échoue :) – Losiowaty

+0

Pourquoi votre entrée est-elle une chaîne et non un Int? – Alexander

Répondre

2

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") 
} 
+0

Ceci est la réponse – WMios

+0

Merci beaucoup !! – androisojavaswift

+0

@androisojavaswift, j'ai corrigé un problème dans ma première réponse. Merci d'utiliser ce dernier code. – OOPer