我想将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。有关此对话的详细信息,请参阅以下图片。
还有其他解决方案可以从Hexa值得到减去小数。?
任何帮助将不胜感激!
答案 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