Saya mencoba menghubungkan rasberry Pi saya ke beberapa tampilan menggunakan bus i2c. Untuk memulai, saya ingin menulis barang secara manual, khususnya byte ke file. Bagaimana Anda menulis byte tertentu ke file? Saya sudah membaca yang itu dan saya pikir masalah saya harus diselesaikan dengan sesuatu seperti ini
echo -n -e \x66\x6f\x6f > byteFileForNow
Namun, ketika saya membuka file itu dengan nano, bukannya foo saya melihat:
x66x6fx6f
Jadi garis miring terbalik lolos, tetapi bukan byte itu sendiri. Saya juga mencoba yang sama hanya tanpa -e kali ini, jadi saya akan sudah diperiksa untuk melihat \ x66 \ x6f \ x6f , tetapi mendapatkan yang sama seperti sebelumnya.
Jadi gema melarikan diri backslash, backslash sendiri dan backslash terlepas dari apakah itu seharusnya.
Adakah cara untuk memperbaikinya?
Menurut halaman manual yang seharusnya melakukan apa yang saya cari.
sumber
bash
menanganinya\xHH
dengan benar, tetapi tidak semua shell melakukannya.Kulit
Dalam shell Anda dapat menggunakan
printf
:Catatan:
%b
- Cetak argumen yang terkait sambil menafsirkan lolos backslash.Perl
Dengan perl, ini bahkan lebih sederhana:
Python
Jika Anda sudah memasang Python, coba langkah berikut:
Pengujian:
sumber
perl -e 'print pack "c*", 0x66, 0x6f, 0x6f'
atauperl -e 'print pack "H*", "666f6f"'
printf %b '\x66'
ini tidak portabel.printf '\x66'
sedikit lebih portabel (bekerja denganksh93
, masih tidak dengandash
jugayash
).printf '\146\157\157'
atauprintf %b '\0146\0157\0157'
akan portabel / standar.Ini mungkin tidak menjawab pertanyaan secara langsung, tetapi Anda juga dapat menggunakan
vi
dalam mode hex:Buka file Anda dan ketik: ESC
:%!xxd
untuk beralih ke mode hex.Anda akan dapat mengedit bagian heks (bagian teks tidak akan diperbarui saat Anda mengubah bagian heks).
Ketika Anda selesai, tekan escape lagi dan ketik: ESC
:%!xxd -r
untuk menulis kembali perubahan yang Anda lakukan dalam mode hex (jangan lupa untuk menyimpan sesudahnya).sumber
Ada banyak informasi dalam manual online untuk setiap perintah; selalu ada baiknya melihat itu sebelum menyerah dan memposting pertanyaan.
man echo
menjelaskan urutan pelarian mana yang diizinkan. Ini ekstraknya.Jadi \ x86 salah. itu harus oktal dan masukkan string Anda ke dalam tanda kutip ganda, jika tidak maka akan ditafsirkan oleh shell.
Contoh:
Edit 1
Sebagai Ouki mengingatkan saya, gema juga merupakan shell builtin, sehingga informasi yang di halaman manual untuk bash,
man bash
; inilah bagian yang relevan. Tetapi gunakan kutipan di"
sekitar string Anda untuk menghentikan shell mengartikan garis miring.sumber
echo
biasanya perintah builtin. Jadi ini tergantung pada shell yang Anda gunakan. Linux defaultnya adalahbash
;\xHH
secara benar menampilkan karakter melalui nilai heksadesimalnya.