ios - 是否有将数字转换为十六进制字符串的快速 native 函数?

标签 ios macos swift numbers hex

是否有任何原生 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/

相关文章:

ios - 结合 didSelectRowAtIndexPath 和 prepareForSegue

ios - 如何在不使用 coreBluetooth 的情况下接近 BT 设备列表?

objective-c - 使用 NSComboBox 进行 Cocoa 绑定(bind)

ios - 使用 Swift 在 Ubuntu 上设置完美服务器时出错

ios - NSJSONSerialization 上的 exc_bad_instruction

ios - Cordova Build失败,错误为带有args的命令xcodebuild错误代码65

ios - NSLayoutConstraint 后 subview 中的 UIButton 未接收到触摸

JavaFX 测试在 Windows 中失败,但在 OSX 和 Linux 中工作

objective-c - 设置 NSStatus 项的标题文本颜色

ios - 使用 UIPickerView 进行 UI 测试时出现 "Failed to get refreshed snapshot"错误