是否有任何原生 Swift 方法可以让任何(至少是整数)数字在字符串中获得其十六进制表示形式?反之亦然。它不能使用 Foundation。例如 String 类有一个函数
func toInt() -> Int?
将表示整数的字符串转换为其 Int 值。我正在寻找类似的东西,使用十六进制字符串。我知道这很容易实现,但如果 Swift 已经有了它会更好。否则,如果您已经对 String 和 Int 进行了扩展以实现以下目的:
let anHex = "0xA0"
if let anInt = anHex.toInt() {
println(anInt) // prints 128
println(anInt.toHexString()) // prints "0xA0"
}
我知道这不是火箭科学,但以防万一,请分享。
PS:这类似于this question ,区别在于它与 Foundation 框架非常相关,而我没有在我的代码中使用它(也没有导入任何其他东西),现在我想保持这种方式,也是为了学习目的。
最佳答案
从Swift 2开始,所有整数类型都有一个构造函数
init?(_ text: String, radix: Int = default)
这样两个整数 可以完成十六进制字符串和十六进制字符串到整数的转换 使用内置方法。示例:
let num = 1000
let str = String(num, radix: 16)
print(str) // "3e8"
if let num2 = Int(str, radix: 16) {
print(num2) // 1000
}
(Swift 1 的旧答案:) 从整数到十六进制字符串的转换可以用
let hex = String(num, radix: 16)
(参见例如 How to convert a decimal number to binary in Swift? )。这不需要导入任何框架 并适用于 2 到 36 之间的任何基数。
从十六进制字符串到整数的转换可以用 BSD 完成
库函数 strtoul()
(比较 How to convert a binary to decimal in 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")
}
关于ios - 是否有将数字转换为十六进制字符串的快速 native 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34531313/