Saya memiliki banyak string semacam ini dan saya ingin menemukan perintah untuk mengubahnya dalam ascii, saya mencoba dengan echo -e
dan od
, tetapi tidak berhasil.
0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
Ini berhasil bagi saya.
$ echo 54657374696e672031203220330 | xxd -r -p
Testing 1 2 3$
-r
memerintahkannya untuk mengkonversi hex ke ascii sebagai lawan dari mode normalnya yang melakukan sebaliknya
-p
memerintahkannya untuk menggunakan format biasa.
Kode ini akan mengkonversi teks 0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2
ke dalam aliran 11 byte dengan nilai yang setara. Byte ini akan ditulis ke standard out.
TESTDATA=$(echo '0xA7.0x9B.0x46.0x8D.0x1E.0x52.0xA7.0x9B.0x7B.0x31.0xD2' | tr '.' ' ')
for c in $TESTDATA; do
echo $c | xxd -r
done
Seperti yang telah ditunjukkan oleh orang lain, ini tidak akan menghasilkan string ASCII yang dapat dicetak karena alasan sederhana bahwa byte yang ditentukan bukan ASCII. Anda perlu memposting informasi lebih lanjut tentang bagaimana Anda memperoleh string ini agar kami dapat membantu Anda.
Cara kerjanya: xxd -r menerjemahkan data heksadesimal ke biner (seperti reverse hexdump). xxd mengharuskan setiap baris dimulai dengan nomor indeks dari karakter pertama pada baris tersebut (jalankan hexdump pada sesuatu dan lihat bagaimana setiap baris dimulai dengan nomor indeks). Dalam kasus kita, kita ingin nomor tersebut selalu nol, karena setiap eksekusi hanya memiliki satu baris. Seperti keberuntungan, data kita sudah memiliki angka nol sebelum setiap karakter sebagai bagian dari notasi 0x. Huruf kecil x diabaikan oleh xxd, jadi yang harus kita lakukan adalah memipa setiap karakter 0xhh ke xxd dan biarkan xxd melakukan pekerjaannya.
Tr menerjemahkan titik menjadi spasi sehingga for akan membaginya dengan benar.
echo -e
pasti gagal untuk Anda karena escaping yang salah.
Kode berikut bekerja dengan baik untuk saya pada output yang sama dari your_program with arguments
:
echo -e $(your_program with arguments | sed -e 's/0x\(..\)\.\?/\\x\1/g')
Namun harap dicatat bahwa hexstring asli Anda terdiri dari karakter yang tidak dapat dicetak.