有没有一种方法可以在Swift中将字符串转换为二进制?
在SO上找到了这个链接,但它只处理将十进制数转换为二进制。我还尝试将特殊字符和字母进行转换。
尝试构建已知ASCII字符的数组并比较它们(对于字母有效),但在比较特殊字符时遇到了问题。
感谢您的回复。
使用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)
Data -> NSData
,.data(using:… -> .dataUsing(…
,只需回滚名称即可。 - user28434'mstepSwift 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
}
}
let string = "Hello World"
let newString = string.stringToBinary()
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)
}
}
}