从Swift 2开始,所有整数类型都有一个构造器。
init?(_ text: String, radix: Int = default)
这样就可以使用内置方法完成整数到十六进制字符串和十六进制字符串到整数之间的转换。例如:
let num = 1000
let str = String(num, radix: 16)
print(str)
if let num2 = Int(str, radix: 16) {
print(num2)
}
将整数转换为十六进制字符串可以使用以下方法:
(Swift 1 的旧回答:)
let hex = String(num, radix: 16)
(例如,请参阅
如何在Swift中将十进制数转换为二进制?)。 这不需要导入任何框架,且适用于2到36之间的任何进位数。
使用BSD库函数
strtoul()
(请参阅
如何在Swift中将二进制数转换为十进制?)可以将十六进制字符串转换为整数,但需要
import Darwin
。
否则,据我所知,没有内置的Swift方法。 下面是一个扩展,它按照给定的基数将字符串转换为数字:
extension UInt {
init?(_ string: String, radix: UInt) {
let digits = "0123456789abcdefghijklmnopqrstuvwxyz"
var result = UInt(0)
for digit in string.lowercaseString {
if let range = digits.rangeOfString(String(digit)) {
let val = UInt(distance(digits.startIndex, range.startIndex))
if val >= radix {
return nil
}
result = result * radix + val
} else {
return nil
}
}
self = result
}
}
示例:
let hexString = "A0"
if let num = UInt(hexString, radix: 16) {
println(num)
} else {
println("invalid input")
}
import Darwin
,而后者是“仅限Swift”。 - Martin R