Convertir String en ASCII

Bonjour à tous :smiley:

Etant novice dans le développement en Swift je me suis inscris au cours de développement d’app sur IOS 11. Actuellement je fais un petit programme en Swift permettant de convertir une chaîne String en ASCII. Hélas je n’y parviens pas :unamused: . Seriez-vous me guider ? Je pensais convertir ma chaîne en binaire puis du binaire la convertir en décimal. J’ai lu la doc du swift concernant le type String mais je n’ai pas réussi a trouver la ou les méthodes permettant de réaliser ces différentes actions. :thinking:

Bien à vous

Hello !

Sans te donner toute la solution pour que tu trouves par toi-même (:stuck_out_tongue:), si tu fais

var textString:String = "a"
var textASCII:unichar = textString.character(at: 0)
print("La valeur de \(textString) en ASCII est \(textASCII)") 

Et là, normalement, dans ta console tu auras écrit “La valeur de a en ASCII est 97”.

1 « J'aime »

Salut schtipoun, merci pour ta réponse :wink:

Donc si je résume ton code tu crées une variable textASCII de type unichar puis tu récupères le caractère en partant de la position 0 est-ce bien ça ? Est-ce que le unichar est bien nécessaire ?

Voici le résultat de ma console :

Playground execution failed:

error: funcPlayground.playground:4:25: error: value of type 'String' has no member 'character'
var textASCII:unichar = textString.character(at: 0)
                        ^~~~~~~~~~ ~~~~~~~~~

Swift.String:42:16: note: did you mean 'characters'?
    public var characters: String.CharacterView { get set }
               ^

Hello Thomas,

Le “unichar” n’est pas indispensable, il sert juste à spécifier le type de variable et c’est aussi plus lisible ou alors plus compréhensible une fois que tu dois reprendre ton code.

Dans la précipitation, je n’ai pas vérifié la fonction .character(at: Int) qui demande une variable de type NSString en entrée et j’avais oublié les \ dans le print. Donc ça devient :

var textString = "a" as NSString
var textASCII:unichar = textString.character(at: 0)
print(“La valeur de \(textString) en ASCII est \(textASCII)”)

Là, j’ai vérifié dans un Playground et c’est bon :slight_smile:

Merci pour ta réactivité !

En effet ça marche merci :wink:, si j’essaie de comprendre donc ton code tu dis que textString est une variable de type NSString, quelle est la différence avec une String ? J’ai regardé dans la doc de Foundation mais je n’ai pas vraiment compris…

NSString est l’équivalent de String dans le language Objective C, qui était le langage de développement sur iOS avant que le Swift apparaisse (d’ailleurs on peut toujours développer en objc si on veut :slight_smile:)

Les deux sont équivalents et sont souvent convertibles l’une vers l’autre sans trop de souci.

Il est quand même vivement conseillé d’utiliser String dans le développement en Swift car c’est le type de variable natif du langage.

Mais là, pour convertir un texte en ASCII, la fonction vient de l’objective c (https://developer.apple.com/documentation/foundation/nsstring/1414645-characteratindex) et il est juste adapté à la syntaxe de Swift. Donc il faut mettre un NSString en entrée car la méthode en dépend !

Merci pour l’info, je viens du monde du php donc ça change un peu :joy:. Donc les fameuses “Classes Bridged to Swift” sont des classes Objective-C que l’on peut utiliser en Swift ?

Exactement. Et, de temps en temps, pour une fonction par exemple, tu auras besoin de mettre @objc devant pour qu’elle soit interprétée en tant que telle.

En cherchant un peu sur la doc de Apple j’ai trouvé cette méthode :

let char: String = "p"

for codeUnit in char.utf16 {
    print(codeUnit)
}

J’obtiens bien la valeur 112

C’est une autre des nombreuses manières de faire ce dont tu as besoin de faire :slight_smile:

Merci schtipoun pour toues ces précisions :grin:

Une autre :

let caractere = "p"
caractere.unicodeScalars.forEach { code in
print(code.value)
}