当前位置: 首页 > 面试题库 >

Swift本机函数将数字作为十六进制字符串

国斌斌
2023-03-14
问题内容

是否有任何(至少整数)数字以本机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:这类似于这个问题,不同之处在于它与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)

(例如,参见如何在Swift中将十进制数转换为二进制?)。这不需要导入任何Framework,并且可以使用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")
}


 类似资料:
  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:

  • 问题内容: 我写了一些代码将十六进制显示字符串转换为十进制整数。但是,当输入类似100a或625b(带有字母的东西)时,我得到了这样的错误: java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(未知源)处的java.lang.NumberFormatException.forInputString(未知源)处为“ 1

  • 我正在写一个Rust程序,读取I2C总线并保存数据。当我读取I2C总线时,我会得到十六进制值,比如,,等等。 现在,我只能将其作为字符串处理并按原样保存。有没有办法把它解析成一个整数?它有内置的功能吗?

  • 我有十六进制字符串,例如“0x103E”,我想将其转换为整数。意思是to我尝试了但它给出了数字格式异常。我如何实现这一点?

  • 将可变长度十六进制字符串(例如,转换为包含该数据的字节数组的最佳方式是什么。 即转换: 进入这个 还是这个 因此,当我将此写入一个文件并将其写入hexresp-C时,我将得到包含的二进制数据。

  • 我有一个十六进制值字符串,我需要将其输出到一个char数组,以便可以将其用作函数输入。 请注意,sha512(firststring)的输出将是 810dcbf236457fee732f100d261c101412e04fc08abd4cb6ddd4442a7cb690acfcae6eeec25e321d5cf5d63174a3b38b31c0143a5702f5f28a43f38b1074285