Dalam tabel ASCII karakter 'J' ada yang memiliki poin kode dalam sistem angka yang berbeda:
Oct Dec Hex Char
112 74 4A J
Mungkin untuk mencetak arang ini dengan titik kode oktal dengan mencetak
printf '\112'
atau echo $'\112'
. Bagaimana cara mencetak karakter yang sama dengan presentasi titik kode desimal dan heksadesimal?
Jawaban:
Hex:
Desember:
Alternatif untuk hex :-)
sumber
awk
.Dengan
zsh
:Untuk mendapatkan karakter (dalam rangkaian karakter saat ini) dari titik kode Unicode:
sumber
Secara umum, shell dapat memahami hex, oct dan angka desimal dalam variabel, asalkan telah didefinisikan sebagai
integers
:Atau mereka adalah hasil dari "Ekspansi Aritmatika":
Jadi, Anda hanya perlu satu cara untuk mencetak karakter yang memiliki nilai variabel.
Tapi di sini ada dua cara yang mungkin:
Dua printf diperlukan, satu untuk mengubah nilai menjadi string heksadesimal dan yang kedua untuk benar-benar mencetak karakter.
Yang kedua akan mencetak titik UNICODE (jika konsol Anda diatur dengan benar).
Sebagai contoh:
Manusia salju.
Karakter yang memiliki representasi utf-8 apa
f0 9f 90 ae
adanya0x1F42E
. Mencaricow face site:fileformat.info
untuk mendapatkannya :Catatan : Ada masalah dengan cara UNICODE untuk bash sebelum 4.3 (dikoreksi dalam versi itu dan ke atas), karakter antara UNICODE titik 128 dan 255 (dalam desimal) mungkin dicetak secara tidak benar.
Referensi
Paragraf keempat di
PARAMETERS
dalamman bash
:Di dalam "EVALUASI ARITHMETIC" di
man bash
:sumber
é
(Oktal: 351, Des: 233, Hex: 0xE9) salah dicetakprintf '\351'
karena mencetak nilai byte0xE9
selalu. Untuk terminal dengan pengkodeanISO-8859-1
(dan sepupu) yang mungkin berfungsi, tetapi di terminal yang dikodekan utf-8, nilai byte dari0xE9
akan muncul sebagai . cont ....\u
(yang berasal dari zsh).Desimal:
Hex:
Fungsi dapat melakukan urutan:
sumber
Anda dapat menggunakan perpustakaan stdlib POSIX Awk :
sumber
Jika Anda memiliki daftar nomor untuk dikonversi, dan ingin menghindari panggilan fungsi dan membuat subkulit untuk setiap karakter, Anda dapat menentukan set ascii sebelumnya:
Perhatikan bahwa null char dikecualikan, jadi setiap char diimbangi oleh 1.
Kemudian gunakan sesuatu seperti ini (mengasumsikan 1 angka per baris):
sumber
Inilah semua konversi yang digunakan
printf
:sumber