在Swift中将字符串转换为二进制?

6

有没有一种方法可以在Swift中将字符串转换为二进制?

在SO上找到了这个链接,但它只处理将十进制数转换为二进制。我还尝试将特殊字符和字母进行转换。

尝试构建已知ASCII字符的数组并比较它们(对于字母有效),但在比较特殊字符时遇到了问题。

感谢您的回复。


我想将一个字符串分解成1和0,无论该字符串包含什么内容。然后从那里开始进入第二阶段... - AMAN77
3个回答

10

使用func data(using encoding: String.Encoding, allowLossyConversion: Bool = default) -> Data?

示例:

Swift 5

let string = "The string"
let binaryData = Data(string.utf8)

Swift 3

let string = "The string"
let binaryData: Data? = string.data(using: .utf8, allowLossyConversion: false)

编辑:或者等一下,你需要将数据转换成二进制表示还是0/1字符串?

编辑:对于0/1字符串,请使用以下方法:

let stringOf01 = binaryData?.reduce("") { (acc, byte) -> String in
    acc + String(byte, radix: 2)
}

编辑:Swift 2

let binaryData = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

是的,我试图获得0101010风格。 - AMAN77
这对于Swift3非常有效,谢谢 :) ,作为公共利益的问题,您是否知道如何在Swift2中完成它? - AMAN77
@AMAN77,Data -> NSData.data(using:… -> .dataUsing(…,只需回滚名称即可。 - user28434'mstep
1
我在你的回答中添加了一些Swift 2的代码,但是在实现0/1字符串部分时遇到了困难。 - AMAN77
请注意,至少在 Swift 3 版本中,不会显示前导零。 - Nicolas Massart

3

Swift 5:

这将添加一个字符串扩展。

extension String {
    func stringToBinary() -> String {
        let st = self
        var result = ""
        for char in st.utf8 {
            var tranformed = String(char, radix: 2)
            while tranformed.count < 8 {
                tranformed = "0" + tranformed
            }
            let binary = "\(tranformed) "
            result.append(binary)
        }
        return result
    }
}

这将返回由空格分隔的0和1字符串。如果需要,您可以修改它以返回数组。
实现:
let string = "Hello World"
let newString = string.stringToBinary()

1
对于Swift 5,您可以添加一个字符串扩展,如下所示:
extension String {
    var hexaToBinary: String {
        return hexaToBytes.map {
            let binary = String($0, radix: 2)
            return repeatElement("0", count: 8-binary.count) + binary
        }.joined()
    }

    private var hexaToBytes: [UInt8] {
        var start = startIndex
        return stride(from: 0, to: count, by: 2).compactMap { _ in
            let end = index(after: start)
            defer { start = index(after: end) }
            return UInt8(self[start...end], radix: 16)
        }
    }
}

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