【问题标题】:Binary to hexadecimal in SwiftSwift 中的二进制转十六进制
【发布时间】:2014-12-19 04:43:10
【问题描述】:

我有一个二进制字符串(例如“00100100”),我希望它是十六进制的(例如“24”)。

有没有一种方法可以在 Swift 中将二进制转换为十六进制?

【问题讨论】:

  • 我会很惊讶,但如果你把字符串分成 4 个字符的块,这并不难。

标签: swift binary hex


【解决方案1】:

一个可能的解决方案:

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
}

【讨论】:

  • 感谢匿名投票者,他们提醒我更新当前 Swift 的代码 :)
  • 如果我想将 80 字符长的字符串转换为十六进制,例如“100000000000000000000000000000000000000000000000000000000000000000000000000000001”,它不允许超过64位。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2014-10-30
    • 2023-04-05
    • 2015-04-21
    • 2014-01-07
    • 2012-04-08
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多