Forum Programmation.shell Afficher un caractere Ascii a partir de son code décimal

Posté par  .
Étiquettes : aucune
0
8
juin
2005
Bonjour,

je cherche a afficher un caractere ascii a partir de son code ascii décimal en shell.

J'ai vu qu'on peut le faire a partir de l'octal ou du hexadecimal, mais est-ce possible "simplement" a partir du code decimal

ex:
code ascii 199, caractere Ç

comment faire un "echo ... 199" qui me renvoit le Ç ?

Merci d'avance.

PS: Je suis en shell ksh, le perl ou python, ou autre ne m'interresse pas, merci.
  • # En lisant les manpages =)

    Posté par  . Évalué à 2.

    Je ne vais pas juste te faire un joli RTFM, mais voila ce que l'on peut lire :

    Without -E, the following sequences are recognized and interpolated:
    \NNN the character whose ASCII code is NNN (octal)

    il nous faut donc le code octal du Ç : \307

    $ echo -e "\307"
    Ç

    pour récupérer le code octal tu peux éventuellement te servir de hexdump :

    echo Ç | hexdump -b

    --
    TiTiX
    • [^] # Re: En lisant les manpages =)

      Posté par  . Évalué à 1.

      Bonjour,

      merci deja pour ta reponse. Pour le RTFM, c'etait deja fait...

      J'avais bien trouvé le echo "\0307" (-e marche pas, je suis sous Solaris 5.9/ksh), mais je n'arrive pas a obtenir la valeur octale a partir du code en decimal.
      J'ai essayé avec od, mais je n'y arrive pas.

      Et hexdump n'existe pas sous mon os (ou pas installé, ce qui revient au meme pour moi :-/ )

      Cordialement
      • [^] # Re: En lisant les manpages =)

        Posté par  . Évalué à 4.

        la valeur octale a partir du code en decimal

        bc est ton ami (en italique la réponse de bc)

        En interactif :
        $ bc
        ibase=10
        obase=8
        133
        205
        199
        307

        Pour inclure dans un script:
        $ echo "ibase=10\n obase=8\n 199\n" | bc
        307
        • [^] # Re: En lisant les manpages =)

          Posté par  . Évalué à 3.

          Sinon ça peut toujours se programmer juste pour rire. Comme ça par exemple, c'est pas hyper joli, mais ça doit marcher avec pas mal de shells :
          dec_to_oct() {
          	local plop plip plup
          	plop=${1}
          	if [ ${plop} -lt 8 ] ; then
          		echo ${plop}
          	else
          		let "plup = plop % 8"
          		let "plop = (plop - plup) / 8"
          		plip=$(dec_to_oct ${plop})
          		let "plip = plip * 10 + plup"
          		echo ${plip}
          	fi
          }
          
          • [^] # Re: En lisant les manpages =)

            Posté par  . Évalué à 2.

            Bien ... Ca va me servir .... C'est plus joli que mon bc, surtout dans un truc paeil:

            echo "ibase=16;`ifconfig en0 | awk '/inet/ {print $4}' |sed 's/\([0-9a-f][0-9a-f]\)/\1\;/g;s/0x//;y/abcdef/ABCDEF/'`"| bc |awk '
            BEGIN {RS="\$"}
            {print $1"."$2"."$3"."$4}'
      • [^] # j'avais lu un peu vite

        Posté par  . Évalué à 2.

        si tu as absoluement besoin d'utiliser le code décimal tu peux peut être faire au préalable une conversion avec bc :

        echo " ibase=10 ; obase=8 ; 199 " | bc
        307


        Il existe certainement d'autres moyens,

        --
        TiTiX
        • [^] # Re: j'ai ma reponse!

          Posté par  . Évalué à 1.

          Merci beaucoup a tous!

          J'ai ce que je voulais grace à vous:

          CaractereAscii=$(echo "\0$(echo " ibase=10 ; obase=8 ; ${CodeAsciiDecimal} " | bc)")

          Merci encore :)
          (j'aime ce forum!)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.