我看到很多关于将十六进制转换为整数的问题,但这些都是无符号的->无符号的类型。我如何将有符号的十六进制转换为整数?
例如:
例如:
somefunc('0xfffff830')
= -2000
0xfffff830
不能被认为是负数),因此这将起作用:let num = "0xfffff830"
let x = Int32(truncatingBitPattern: strtoul(num, nil, 16))
println(x) // -2000
strtoul()
将十六进制字符串转换为无符号整数UInt
,而Int32(truncatingBitPattern:)
则从给定参数的最低32位创建一个(有符号)32位整数。
更新至Swift 4:
let num = "0xfffff830"
let x = Int32(bitPattern: UInt32(num.dropFirst(2), radix: 16) ?? 0)
print(x) // -2000
let num = "0xfffff830"
var result: UInt32 = 0
let converter = NSScanner(string: num)
converter.scanHexInt(&result)
print(unsafeBitCast(result, Int32.self)) // prints -2000
Int32(bitPattern: result)
而不是 unsafeBitCast(...)
。 - Martin Rvar hex = UInt32(0xfffff830)
let signedHex : Int
if hex > UInt32.max / 2 {
signedHex = -Int(~hex + 1) // ~ is the Bitwise NOT Operator
} else {
signedHex = Int(hex)
}