快速将字符串转换为二进制?
Posted
技术标签:
【中文标题】快速将字符串转换为二进制?【英文标题】:Convert a String to binary in swift? 【发布时间】:2017-03-02 11:30:45 【问题描述】:有没有办法在 Swift 中将字符串转换为二进制?
在 SO 上找到 this link,但它只处理转换小数。我也在尝试转换特殊字符和字母。
尝试构建一个已知 ASCII 字符数组并比较它们(适用于字母),但在比较特殊字符时遇到问题。
感谢您的回复。
【问题讨论】:
无论字符串包含什么,我都想将字符串分解为 1 和 0。然后从那里我将进入第二阶段...... 【参考方案1】:使用func data(using encoding: String.Encoding, allowLossyConversion: Bool = default) -> Data?
例子:
斯威夫特 5
let string = "The string"
let binaryData = Data(string.utf8)
斯威夫特 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 有点风格 这对 swift3 非常有用,谢谢 :) 出于公共利益,您是否知道在 swift2 中也可以做到这一点? @AMAN77、Data -> NSData
、.data(using:… -> .dataUsing(…
,只是回滚名称。
在您的答案中添加了一些 swift 2 代码,但一直在努力完成 0/1 字符串部分。
请注意,至少 swift 3 版本不显示前导零。【参考方案2】:
斯威夫特 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()
【讨论】:
【参考方案3】:对于 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)
【讨论】:
以上是关于快速将字符串转换为二进制?的主要内容,如果未能解决你的问题,请参考以下文章