【发布时间】:2014-12-19 04:43:10
【问题描述】:
我有一个二进制字符串(例如“00100100”),我希望它是十六进制的(例如“24”)。
有没有一种方法可以在 Swift 中将二进制转换为十六进制?
【问题讨论】:
-
我会很惊讶,但如果你把字符串分成 4 个字符的块,这并不难。
我有一个二进制字符串(例如“00100100”),我希望它是十六进制的(例如“24”)。
有没有一种方法可以在 Swift 中将二进制转换为十六进制?
【问题讨论】:
一个可能的解决方案:
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
}
【讨论】:
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
【讨论】: