Dalam skrip shell UNIX, apa yang dapat saya gunakan untuk mengubah bilangan desimal menjadi heksadesimal? Saya pikir od akan melakukan trik, tetapi tidak menyadari bahwa saya memberinya representasi angka ASCII.
printf? Kotor! Menggunakannya untuk saat ini, tetapi apa lagi yang tersedia?
Jawaban:
Jika Anda ingin memfilter seluruh file bilangan bulat, satu per baris:
sumber
ibase=16
. Anda mungkin ingin membaca manual tentang bc untuk lebih jelasnya.Sudah mencoba
printf(1)
?Mungkin ada cara untuk melakukan itu dengan fungsi bawaan di semua shell tetapi itu kurang portabel. Saya belum memeriksa spesifikasi POSIX sh untuk melihat apakah ia memiliki kemampuan seperti itu.
sumber
bc
adalah. misalnya, mengambil238862874857408875879219909679752457540
sebagai masukan, printf memberi kita "Hasil terlalu besar". metode BC bekerja sangat baik untuk hal-hal yang lebih besar dari int / long / bigint standarprintf "%X"
dengan huruf besar X.bc
tidak tersedia di semua tempat (setidaknya tidak di Linux tertanam saya).Heksadesimal ke desimal:
Desimal ke heksadesimal:
sumber
sumber
-v VAR
adalah ekstensi bash. Tidak disebutkan di halaman manual , terungkap hanya jika seseorang meneleponprintf
tanpa argumenMaaf salah saya, coba ini ...
Contoh:
sumber
printf
danhex
perintah tidak tersedia.printf
tidak tersedia?Mencoba:
sumber
Di dalam
zsh
Anda dapat melakukan hal semacam ini:Contoh diambil dari
zsh
halaman dokumen tentang Evaluasi Aritmatika .Saya yakin Bash memiliki kemampuan serupa.
sumber
Dalam kasus saya, saya menemukan satu masalah dengan menggunakan solusi printf:
$ printf "%x" 008 bash: printf: 008: invalid octal number
Cara termudah adalah menggunakan solusi dengan bc , disarankan di posting lebih tinggi:
$ bc <<< "obase=16; 008" 8
sumber
sumber
sumber
Ini bukan skrip shell, tetapi ini adalah alat cli yang saya gunakan untuk mengonversi angka di antara bin / oktober / des / hex:
sumber