在Swift中将Hexa转换为Decimal

时间:2017-08-14 05:26:38

标签: swift hex decimal

我想将Hexa值转换为十进制。所以我试过这个。当值> 0时,它工作正常。但是当值<0时,则返回错误的值。

let h2 = “0373”
let d4 = Int(h2, radix: 16)!
print(d4) // 883

let h3 = “FF88”
let d5 = Int(h3, radix: 16)!
print(d5) // 65416

当我通过FF88时,它返回65416.但实际上它是-120。

现在,我正在关注Convert between Decimal, Binary and Hexadecimal in Swift回答。但它并不总是有效。

请检查此对话online。有关此对话的详细信息,请参阅以下图片。

enter image description here

还有其他解决方案可以从Hexa值得到减去小数。?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

FF 88 16位带符号整数的十六进制表示 -120。您可以先创建无符号整数然后转换它 具有相同位模式的签名对应方:

let h3 = "FF88"
let u3 = UInt16(h3, radix: 16)!  // 65416
let s3 = Int16(bitPattern: u3)   // -120

答案 1 :(得分:1)

十六进制转换取决于整数类型(signed , unsigned)和大小(64 bits , 32 bits , 16 bits . .),这是您错过的。

源代码:

let h3 = "FF88"
let d5 = Int16(truncatingBitPattern: strtoul(h3, nil, 16))
print(d5) // -120