2016-07-18 1 views
0

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

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.

+0

Merci beaucoup! C'est l'approche la plus logique que j'ai vu sur ce sujet! –