2017-03-15 3 views
1
let hexString = "0x42f9b6c9" 
let toInt = Int32(truncatingBitPattern: strtoul(self, nil, 16)) 
let toFloat = Float(bitPattern: UInt32(self)) 

RÉSULTAT: 124,857Comment convertir un hexagone en float signé dans Swift? Fonctionne très bien avec un nombre positif, mais ne fonctionne pas négatif

let hexString = "0xc2f9b6c9" 
let toInt = Int32(truncatingBitPattern: strtoul(self, nil, 16)) 
let toFloat = Float(bitPattern: UInt32(self)) 

app plante ici parce que la valeur est négative, le résultat attendu est -124,857

S'il vous plaît aider. Je vous remercie!

Répondre

1

strtoul signifie chaîne à long non signé. Essayez strtol

+3

En outre, le "U" dans UInt32 signifie "non signé". – creeperspeak

+0

@creeperspeak, vraiment? Sincèrement, j'ai toujours pensé que cela signifiait Unicode. Apprendre quelque chose de nouveau chaque jour. Merci! (Et oui, maintenant que je réfléchis, quelle est la différence entre un Int qui est Unicode ou pas, en fait, que * voudrait-il dire un Unicode Int?) – dfd

+0

Merci :) Mais savez-vous comment le convertir? à signer? – user

0

Mieux vaut faire une extension de chaîne

extension String { 
func hexToFloat() -> Float { 
    var toInt = Int32(truncatingBitPattern: strtol(self, nil, 16)) 
    var float:Float32! 
    memcpy(&float, &toInt, MemoryLayout.size(ofValue: float)) 
    print("\(float)") 
    return float 
} 

}

Exemple

"0xc2f9b6c9".hexToFloat() 
//-124.857 
"0x41240000".hexToFloat() 
//10.25