swift - UTF8 到 Base 2 表示 Swift

标签 swift binary radix utf

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

最佳答案

这里有一个可能的方法:

  • 枚举字符串的 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 标量。

关于swift - UTF8 到 Base 2 表示 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433744/

相关文章:

ios - 为什么 Swift 的字符类型不是 Hashable?

swift - 从 ReactiveCocoa 2.4.7 跳到 ReactiveCocoa 5.0.0

swift - 如何查找字符串是否包含字符串的所有字符以在 Swift 中进行实时搜索?

c - C中的二进制数输出

python - 如何尽可能快地计算一个以 3 为底的整数值,该整数以一个巨大的十进制数字序列(超过一百万)给出?

C++ 继承 : confused with base member access from derived object

objective-c - Objc 可见字符串枚举但不是 RawRepresentable

tcp - 二进制协议(protocol)死了吗?

c++ - 快速将 uint32_t 转换为二进制

lisp - 在 Lisp 中将数字从某个基数转换为基数 10