如何在 Swift 中将十六进制转换为有符号浮点数?适用于正数但不适用于负数
Posted
技术标签:
【中文标题】如何在 Swift 中将十六进制转换为有符号浮点数?适用于正数但不适用于负数【英文标题】:How do you convert a hex to signed float in Swift? Works fine with positive number but doesn't work on negative 【发布时间】:2017-03-15 00:35:51 【问题描述】:let hexString = "0x42f9b6c9"
let toInt = Int32(truncatingBitPattern: strtoul(self, nil, 16))
let toFloat = Float(bitPattern: UInt32(self))
结果:124.857
let hexString = "0xc2f9b6c9"
let toInt = Int32(truncatingBitPattern: strtoul(self, nil, 16))
let toFloat = Float(bitPattern: UInt32(self))
应用程序在此处崩溃,因为该值为负数,预期结果为 -124.857
请帮忙。谢谢!
【问题讨论】:
【参考方案1】:strtoul
表示字符串为无符号长。试试strtol
【讨论】:
另外,UInt32 中的“U”代表“无符号”。 @creeperspeak,真的吗?说真的,我一直认为它意味着 Unicode。每天学些新东西。谢谢! (是的,现在我实际上在想,与不是 Unicode 的 Int 有什么区别。事实上,将 unicode Int 是什么意思?) 谢谢 :) 但是你们知道如何将其转换为签名吗? @user 你还需要说UInt32(truncatingBitPattern: ...
,而不是使用Int32
。【参考方案2】:
最好做个String的扩展
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
【讨论】:
以上是关于如何在 Swift 中将十六进制转换为有符号浮点数?适用于正数但不适用于负数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用脚本在 Google 表格中将时间转换为十进制浮点数?