UTF8到Base 2表示Swift

时间:2016-07-18 09:56:59

标签: swift binary base utf

我想知道将UTF8数组或字符串转换为基数2表示的最佳方法是什么(每个字符的每个UTF8值为其基数2表示)。由于您可以有两个值来表示同一个字符的代码,我想从数组中提取值然后转换它不是一个有效的方法。那是哪一个?谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种可能的方法:

  • 枚举字符串的unicode标量。
  • 将每个unicode标量转换回字符串,并枚举它 UTF-8编码。
  • 将每个UTF-8字节转换为“二进制字符串”。

最后一项任务可以使用以下通用方法完成 适用于所有无符号整数类型:

extension UnsignedIntegerType {
    func toBinaryString() -> String {
        let s = String(self, radix: 2)
        let numBits = 8 * sizeofValue(self)
        return String(count: numBits - s.characters.count, repeatedValue: Character("0")) + s
    }
}

// Example:
// UInt8(100).toBinaryString() = "01100100"
// UInt16.max.toBinaryString() = "1111111111111111"

然后转换为UTF-8二进制表示即可 这样实现:

func binaryUTF8Strings(string: String) -> [String] {
    return string.unicodeScalars.map {
        String($0).utf8.map { $0.toBinaryString() }.joinWithSeparator(" ")
    }
}

使用示例:

for u in base2UTF8("H€llö ") {
    print(u)
}

输出:

01001000
11100010 10000010 10101100
01101100
01101100
11000011 10110110
00100000
11110000 10011111 10000111 10101001
11110000 10011111 10000111 10101010

请注意,“”是单个字符(“扩展字形集群”) 但两个 unicode标量。

相关问题