Saya memiliki konteks di mana saya perlu mengkonversi biner ke heksadesimal dan desimal dan sebaliknya dalam skrip shell. Dapatkah seseorang menyarankan saya alat untuk ini?
shell-script
binary
arithmetic
Bangi
sumber
sumber
Jawaban:
Cukup mudah untuk melakukan konversi dari biner di bash murni (
echo
danprintf
sudah builtin):Biner ke desimal
Biner ke heksadesimal
Kembali ke biner menggunakan bash saja agak lebih kompleks, jadi saya sarankan Anda melihat jawaban lain untuk solusi untuk itu.
sumber
printf '%x\n' 10
, misalnya.printf %d
untuk bin2dec?$(( ... ))
sudah memberikan hasil desimal,echo
sudah cukup.printf '%s\n' foo
bukanecho
karena berbagai alasan (kebanyakan portabilitas), untuk alasan yang sama, saya tidak menggunakannya di sini.echo
builtin diimplementasikan dengan baik ). Salahku!Dengan asumsi bahwa dengan biner, yang Anda maksud adalah data biner seperti dalam data dengan nilai byte yang mungkin termasuk 0, dan bukan angka dasar-2:
Untuk mengkonversi dari biner,
od
(standar),xxd
(datang denganvim
) atauperl
'sunpack
datang ke pikiran.Sekarang, untuk mengkonversi kembali ke biner,
awk
(standar),xxd -r
atauperl
'spack
:Dari output desimal dari
od -tu1
atau diperl
atas:Dari heksa
perl
atau dixxd -p
atas:sumber
Anda dapat menggunakan bc untuk ini dengan memanipulasi
ibase
danobase
parameter:Kuncinya adalah bahwa Anda harus eksplisit tentang pangkalan. Jadi jika ibase Anda adalah 2, maka jika Anda menetapkan huruf ke 10, itu tidak akan melakukan apa-apa, karena 10 dalam biner adalah 2. Oleh karena itu Anda perlu menggunakan notasi heksadesimal.
Jadi biner ke desimal akan (perhatikan bahwa obase adalah A)
Biner ke desimal:
Biner ke hex:
Jika 'basis output'
obase
diubah terlebih dahulu, seharusnya lebih mudah:sumber
echo 'ibase=2;obase=F;1111
yang harus sama dengan desimal 15, yaitu. F dalam hex Keluar sebagai 10, yang ada di basis 15 (digit 0-E). Hal ini juga lebih mudah jika Anda menyatakan obase yang pertama , misalnya:echo 'obase=16;ibase=2;1111'|bc
. Tidak ada kebingungan.ibase
, Anda harus memberikan masukan dalam yang dasar, bahkan untukobase
. Jadi, dalam contoh Anda akanecho 'ibase=2;obase=10000;11110001011010'|bc
. Lebih baik mendengarkan saran goldilocks dan membalikkan urutan - set pertamaobase
, laluibase
.Jika Anda bermaksud mengonversi angka dari basis-2 ke 10 atau 16 dan kembali,
bc
adalah alat standar untuk melakukannya seperti yang telah disebutkan oleh psarossy .Beberapa shell seperti
zsh
memiliki dukungan bawaan untuk konversi basis sebagai bagian dari operator ekspansi aritmatika mereka:dan seterusnya.
Keduanya
ksh93
danzsh
juga mendukung:Tetapi perhatikan bahwa, ketika diperluas,
$binary
akan memiliki2#
atau16#
awalan (yang dapat Anda strip dengan${binary#*#}
.ksh93
juga mendukung:untuk mengkonversi ke biner.
sumber
Untuk penggunaan biner ke heksadesimal: alat xxd di linux dan untuk biner ke desimal Anda dapat menggunakan alat qalculate.
Untuk bantuan tentang tipe xxd
xxd --help
atauman xxd
di Linux.sumber
Anda bisa menggunakan PHP:
Atau Perl:
Atau POSIX Awk svnpenn / stdlib :
sumber
Seperti yang disebutkan dalam jawaban sebelumnya Anda dapat melakukan Binary ke Decimal dan Hexa Decimal seperti berikut di Bash menggunakan echo dan printf. Saya hanya menambahkan di sini cara mengkonversi dari Desimal dan Hex ke biner menggunakan Bash murni.
Biner ke Desimal menggunakan gema
Biner ke Hexa-Desimal menggunakan printf
Bilangan bulat desimal ke konversi Biner hanya menggunakan Bash
Hanya menggunakan Bash, jika Anda ingin mengonversi desimal menjadi biner, Anda dapat melakukannya seperti berikut:
Dan kemudian salin dan tempel yang berikut ini:
Dan kemudian coba dari tempat Anda menyimpan:
Integer harus ditambahkan !!
Konversi heksadesimal ke Biner hanya menggunakan Bash
Demikian pula, heksadesimal ke biner, sebagai berikut hanya menggunakan bash:
Sebagai contoh:
Hex harus dilewati:
sumber