Swift中的二进制转十六进制

4

我有一个二进制字符串(例如“00100100”),我想将它转换为十六进制(例如“24”)。

在Swift中是否有编写将二进制转换为十六进制的方法?


如果你把字符串分成四个字符一组,那么这并不难做到,但我会感到非常惊讶。 - Scott Hunter
2个回答

7
一个可能的解决方案:
func binToHex(bin : String) -> String {
    // binary to integer:
    let num = bin.withCString { strtoul($0, nil, 2) }
    // integer to hex:
    let hex = String(num, radix: 16, uppercase: true) // (or false)
    return hex
}

只要数字符合UInt的范围(32位或64位,取决于平台),这种方法就可行。它使用了BSD库函数strtoul(),该函数根据给定的基数将字符串转换为整数。
对于更大的数字,您需要分块处理输入。您还可以添加对输入字符串的验证。
针对Swift 3/4的更新:不再需要strtoul函数。对于无效的输入,返回nil
func binToHex(_ bin : String) -> String? {
    // binary to integer:
    guard let num = UInt64(bin, radix: 2) else { return nil }
    // integer to hex:
    let hex = String(num, radix: 16, uppercase: true) // (or false)
    return hex
}

1
感谢匿名的投票者,提醒我更新当前Swift的代码 :) - Martin R
如果我想将80个字符长的字符串转换为十六进制,例如“10000000000000000000000000000000000000000000000000000000000000000000000000000001”,它不允许超过64位。 - SML

0
let binaryInteger = 0b1 
// Your binary number
let hexadecimalNum = String(binaryInteger, radix: 16) 
// convert into string format in whatever base you want

更多信息请参考

let decimalInteger = 15       // prefix NONE
let binaryInteger = 0b10001   // prefix 0b
let octalInteger = 0o21       // prefix 0o
let hexadecimalInteger = 0x11 // prefix 0x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接