1 votes

Comment faire pour que mon traducteur binaire traite plusieurs nombres binaires

Je suis actuellement en train de construire un traducteur binaire (binaire en texte) dans l'éditeur AppleScript. Le code que j'ai écrit ne vous permet d'entrer qu'un seul nombre binaire à la fois. Je veux entrer plusieurs nombres binaires à la fois et toujours avoir le code pour le traduire. J'ai réfléchi à plusieurs façons différentes pour que le code puisse traduire plusieurs nombres (binaires), mais tout ce que j'essaie ne semble pas fonctionner. Je suis relativement nouveau en AppleScript, et je suis assez perplexe. Voici le code :

set binaryString to text returned of (display dialog "Binaire Ici :" default answer "" with icon note buttons {"Annuler", "Traducteur"}  default button 2 with title "Traducteur Binaire") as string
set n8 to character 1 of binaryString
set n7 to character 2 of binaryString
set n6 to character 3 of binaryString
set n5 to character 4 of binaryString
set n4 to character 5 of binaryString
set n3 to character 6 of binaryString
set n2 to character 7 of binaryString
set n1 to character 8 of binaryString
if n8 = "0" then
    set d8 to 0
else if n8 = "1" then
    set d8 to 128
end if
if n7 = "0" then
    set d7 to 0
else if n7 = "1" then
    set d7 to 64
end if
if n6 = "0" then
    set d6 to 0
else if n6 = "1" then
    set d6 to 32
end if
if n5 = "0" then
    set d5 to 0
else if n5 = "1" then
    set d5 to 16
end if
if n4 = "0" then
    set d4 to 0
else if n4 = "1" then
    set d4 to 8
end if
if n3 = "0" then
    set d3 to 0
else if n3 = "1" then
    set d3 to 4
end if
if n2 = "0" then
    set d2 to 0
else if n2 = "1" then
    set d2 to 2
end if
if n1 = "0" then
    set d1 to 0
else if n1 = "1" then
    set d1 to 1
end if
set decimalString to (d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8)
set asciiString to (caractère ASCII (decimalString))
return asciiString

1voto

OnePablo Points 1

Votre script peut être grandement simplifié. Ce que vous semblez faire, c'est convertir un nombre binaire en base 10 (décimale), puis à partir de là en un code de caractère. (Note latérale : Il est toujours utile d'essayer d'être explicite dans la description de ce que votre code fait - ou a l'intention de faire.)

set bits to every character in the text returned of ¬
    (display dialog "Entrée binaire :" with icon note ¬
    buttons {"Annuler", "Convertir"} default button 2 ¬
    with title "Conversion binaire en texte")

set |2| to 1 -- puissances de 2, c'est-à-dire 2, 2¹, 2², 2³,..., 2
set d to 0    -- la valeur en base 10 (remplace votre chaîne décimale)

repeat with bit in the reverse of the bits
    set d to d + bit * |2|
    set |2| to 2 * |2|
end repeat

set char to character id d
return char

Vous souhaitez répéter ce processus plusieurs fois pour convertir autant de nombres binaires que l'utilisateur en fournit. Il n'y a pas beaucoup d'options pour permettre facilement à l'utilisateur d'obtenir plusieurs valeurs. Mais il semble que vous expérimentez avec le codage binaire/texte des données, et que ces nombres binaires représentent probablement 8 bits d'un seul octet de données, donc il semble raisonnable de laisser un utilisateur fournir autant de bytes de données qu'il souhaite dans une boîte de dialogue d'entrée unique, en séparant simplement chaque valeur binaire par un espace, par exemple

"1011010 11010011 01011000 ..."

ce qui représenterait trois bytes de données sous forme binaire qui sont faciles à diviser en éléments individuels et à convertir un par un.

Pour ce faire, il est logique de placer le morceau de code qui effectue la conversion de base à l'intérieur d'un handler (fonction) qui peut être réutilisé encore et encore pour effectuer autant de conversions que nécessaire sans avoir à réécrire le code identique à chaque fois.

Voici un brouillon d'un script qui fait tout cela:

set bytes to every word in the text returned of ¬
    (display dialog "Entrée binaire :" with icon note ¬
    buttons {"Annuler", "Convertir"} default button 2 ¬
    with title "Conversion binaire en texte")

set chars to {} -- cela se remplira avec chaque conversion décimale

repeat with bits in bytes
     -- appeler le handler ci-dessous
    set end of chars to the decimal from bits
end repeat

-- Maintenant convertir les nombres décimaux en texte
return character id chars

# Un handler qui prend un nombre binaire et renvoie sa représentation
# décimale. La valeur binaire peut être transmise de l'une des
# manières suivantes:
#        1. une liste de caractères de nombres
#             par exemple {0, 1, 0, 1, 1, 0, 1, 0}, ou
#                  {"0", "1", "0", "1", "1", "0", "1", "0"}  
#        2. une chaîne, par exemple "01011010"
#        3. un nombre, par exemple 1011010
to decimal from binary as {list, text, integer}
    local binary

    set |2| to 1
    set d to 0

    tell a reference to binary to if its class  list then ¬
        set the contents to the characters of (it as text)

    repeat with bit in the reverse of the binary
        set d to d + bit * |2|
        set |2| to 2 * |2|
    end repeat

    return d
end decimal

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X