【问题标题】:Convert a String to binary in swift?快速将字符串转换为二进制?
【发布时间】:2017-03-02 11:30:45
【问题描述】:

有没有办法在 Swift 中将字符串转换为二进制?

在 SO 上找到 this link,但它只处理转换小数。我也在尝试转换特殊字符和字母。

尝试构建一个已知 ASCII 字符数组并比较它们(适用于字母),但在比较特殊字符时遇到问题。

感谢您的回复。

【问题讨论】:

  • 无论字符串包含什么,我都想将字符串分解为 1 和 0。然后从那里我将进入第二阶段......

标签: string binary char ascii swift3


【解决方案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)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多