Swift 4十六进制字符串到二进制字符串

时间:2018-02-25 04:16:38

标签: swift binary hex

注意到将十六进制字符串转换为二进制字符串的旧方法已从swift中删除,即:String(hex,radix:2) - >二进制字符串

swift 4中有什么替代方案?

1 个答案:

答案 0 :(得分:1)

首先需要将hexaString转换为字节数组[UInt8]。然后,您可以使用String(_, radix:)将字节转换为二进制。请注意,如果您想返回String而不是字符串数组[String],则需要添加前导零以使二进制字符串长度一致(8个字符):

extension String {
    typealias Byte = UInt8
    var hexaToBytes: [Byte] {
        var start = startIndex
        return stride(from: 0, to: count, by: 2).compactMap { _ in   // use flatMap for older Swift versions
            let end = index(after: start)
            defer { start = index(after: end) }
            return Byte(self[start...end], radix: 16)
        }
    }
    var hexaToBinary: String {
        return hexaToBytes.map {
            let binary = String($0, radix: 2)
            return repeatElement("0", count: 8-binary.count) + binary
        }.joined()
    }
}
let hexString = "00ff01fe"

hexString.hexaToBinary   // "00000000111111110000000111111110"