gpt4 book ai didi

ios - Swift native 函数将数字作为十六进制字符串

转载 作者:IT王子 更新时间:2023-10-29 05:01:19 25 4
gpt4 key购买 nike

是否有任何原生 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 - Swift native 函数将数字作为十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27189338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com