Dans le tableau ASCII, le caractère «J» existe qui a des points de code dans différents systèmes numériques:
Oct Dec Hex Char
112 74 4A J
Il est possible d'imprimer ce caractère par un point de code octal en imprimant
printf '\112'
ou echo $'\112'
. Comment imprimer le même caractère par des présentations de point de code décimal et hexadécimal?
Réponses:
Hex:
Déc:
Alternative pour hex :-)
la source
awk
.Avec
zsh
:Pour obtenir un caractère (dans le jeu de caractères actuel) à partir du point de code Unicode:
la source
En général, le shell peut comprendre les nombres hexadécimaux, octaux et décimaux dans les variables, à condition qu'ils soient définis comme
integers
:Ou ils sont le résultat d'une "expansion arithmétique":
Ainsi, vous avez juste besoin d'une façon d'imprimer le caractère qui appartient à une valeur de variable.
Mais voici deux manières possibles:
Les deux printf sont nécessaires, l'un pour transformer la valeur en une chaîne hexadécimale et le second pour réellement imprimer le caractère.
Le second imprimera n'importe quel point UNICODE (si votre console est correctement définie).
Par exemple:
Un bonhomme de neige.
Le caractère qui a une représentation UTF-8
f0 9f 90 ae
est0x1F42E
. Recherchercow face site:fileformat.info
pour obtenir :Remarque : Il y a un problème avec la manière UNICODE en ce que pour bash avant 4.3 (corrigé dans cette version et vers le haut), les caractères entre les points UNICODE 128 et 255 (en décimal) peuvent être imprimés incorrectement.
Références
Quatrième paragraphe à l'intérieur
PARAMETERS
deman bash
:Dans "ÉVALUATION ARITHMÉTIQUE" en
man bash
:la source
é
(Octal: 351, Dec: 233, Hex: 0xE9) est incorrectement imprimé avecprintf '\351'
car il imprime une valeur d'octet de0xE9
toujours. Pour un terminal avec un encodage deISO-8859-1
(et des cousins) qui peut fonctionner, mais dans les terminaux encodés en utf-8, une valeur d'octet de0xE9
devrait apparaître comme . suite ....\u
(qui vient de zsh).Décimal:
Hex:
La fonction peut faire des séquences:
la source
Vous pouvez utiliser la bibliothèque stdlib POSIX Awk :
la source
Si vous avez une liste de nombres à convertir et que vous souhaitez éviter un appel de fonction et la création d'un sous-shell pour chaque caractère, vous pouvez définir au préalable l'ensemble ascii:
Notez que le caractère nul est exclu, donc chaque caractère est compensé par 1.
Ensuite, utilisez quelque chose comme ça (en supposant 1 numéro par ligne):
la source
Voici toutes les conversions utilisant
printf
:la source