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

결과에서 작동하지 않습니다 : 값이 음수이기 때문에 124.857Swift에서 16 진수를 부호있는 부동 소수점으로 변환하는 방법은 무엇입니까? 양수와 잘 작동하지만 부정적인

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

응용 프로그램은 여기에 충돌, 예상 된 결과가 -124.857

이 도와주세요입니다. 고맙습니다!

답변

1

strtoul은 문자열을 부호없는 long으로 지정합니다. strtol

+3

를 만들기 위해 노력하고, UINT32의 "U"는 "서명"을 의미합니다. – creeperspeak

+0

@creeperspeak, 정말요? 진심으로, 나는 항상 그것이 유니 코드를 의미한다고 생각했다. 매일 새로운 것을 배우십시오. 감사! (그리고 네, 실제로 제가 실제로 생각하고있는 것은, 유니 코드 인 것과 그렇지 않은 것의 차이점입니다. 사실, 유니 코드 Int가 의미하는 것은 무엇입니까?) – dfd

+0

고맙습니다.하지만 당신은 그것을 변환하는 방법을 알고 있습니까? 서명 했어? – user

0

더 나은 문자열

의 확장
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 
} 

}

예 또한

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