Je me demandais quel est le meilleur moyen de convertir un tableau ou une chaîne UTF8 en sa représentation en base 2 (chaque valeur UTF8 de chaque caractère à sa représentation en base 2). Puisque vous pourriez avoir deux valeurs représentant le code pour le même caractère, je suppose que l'extraction de valeurs du tableau et sa conversion n'est pas une méthode valide. Alors lequel est? Je vous remercie!Représentation Swift UTF8 à Base 2
0
A
Répondre
1
Voici une approche possible:
- énumèrent les scalaires unicode de la chaîne.
- Convertissez chaque scalaire unicode en une chaîne et énumérez son codage UTF-8 .
- Convertit chaque octet UTF-8 en "chaîne binaire".
La dernière tâche peut être fait avec la méthode générique suivante qui fonctionne pour tous les types entiers non signés:
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"
Ensuite, la conversion à une représentation binaire UTF-8 peuvent être mis en œuvre comme ceci:
func binaryUTF8Strings(string: String) -> [String] {
return string.unicodeScalars.map {
String($0).utf8.map { $0.toBinaryString() }.joinWithSeparator(" ")
}
}
Exemple d'utilisation:
for u in base2UTF8("H€llö ") {
print(u)
}
Sortie:
01001000 11100010 10000010 10101100 01101100 01101100 11000011 10110110 00100000 11110000 10011111 10000111 10101001 11110000 10011111 10000111 10101010
Notez que "" est un caractère unique (un "groupe graphème étendu") mais deux scalaires unicode.
Merci beaucoup! C'est l'approche la plus logique que j'ai vu sur ce sujet! –