Mengapa Anda tidak melihat kode biner ketika Anda membuka file biner dengan editor teks?

51

Mengapa Anda tidak melihat kode biner ketika Anda membuka file biner dengan editor teks? Misalnya, ketika saya membuka gambar dengan editor teks, saya melihat beberapa karakter aneh dan juga beberapa karakter yang dapat dibaca manusia; tetapi gambar harus dikodekan dalam biner.

Berkenaan dgn pura
sumber
8
Apa yang kamu harapkan? Menurut Anda bagaimana ini harus diarsipkan?
Nikodemus RIP
2
Saya bertanya-tanya mengapa lebih banyak editor tidak menawarkan ke biner sebagai urutan ASCII 1/0 mentah.
Xeoncross
7
@Xenocross: karena urutan mentah 0/1 tidak berguna, terlalu sulit untuk decoding manual karena mereka mengambil sejumlah besar ruang layar; tampilan hex umumnya lebih unggul untuk decoding manual. Dan dengan beberapa pelatihan, Anda dapat menerjemahkan hex ke biner dan sebaliknya dengan cepat dan mudah.
Lie Ryan
3
@Fiasco Labs: Pedantry: satu nomor hex dengan dua digit - 00 ke FF, yang diterjemahkan menjadi desimal 0 - 255 (8 bit mewakili 2 ^ 8 = 256 status yang mungkin).
Piskvor
1
@Piskvor - Terima kasih telah mengatakannya lebih baik daripada yang saya lakukan. deadbeef adalah nomor hex dengan 8 digit, sebagai catatan. ; ^)
Fiasco Labs

Jawaban:

83

Biner dan data teks tidak terpisah: Mereka hanya data . Itu tergantung pada interpretasi yang membuat mereka satu atau yang lain. Jika Anda membuka data biner (seperti file gambar) dalam editor teks, banyak dari itu tidak masuk akal, karena tidak sesuai dengan interpretasi yang Anda pilih (sebagai teks).

Apa yang Anda sebut teks adalah subset dari konten file yang mungkin: Data yang di set karakter yang diberikan diterjemahkan ke karakter yang dapat dibaca.

Misalnya, dalam ASCII , Anda dapat melihat bahwa, dari 128 nilai yang "diizinkan", hanya sekitar setengahnya berupa huruf dan angka, 30 adalah tanda baca, dan sisanya adalah karakter kontrol . Grup yang terakhir tidak banyak digunakan dalam file teks, dan mereka tidak memiliki representasi tekstual yang benar-benar bagus. Beberapa di antaranya adalah karakter Tab dan Newline , di mana editor teks sudah harus kreatif dalam menampilkannya.

Beberapa editor teks memiliki opsi untuk secara eksplisit menampilkan spasi putih. Kemudian mereka akan benar-benar digambarkan sebagai karakter, di samping perilaku pemformatan reguler mereka (yang juga hanya merupakan interpretasi dari karakter-karakter ini).

ASCII Murni hanya mengartikan 128 nilai. Bytes yang digunakan untuk menyimpan informasi ini masing-masing memiliki 256 nilai yang mungkin, jadi setengah dari nilai yang mungkin tidak diizinkan di ASCII. Itu misalnya digunakan dalam set karakter khusus kawasan, seperti Latin 1, tetapi dalam ASCII, mereka tidak terdefinisi. Mereka tidak memiliki representasi yang berguna dalam penampil teks yang hanya bisa menangani ASCII.


Data biner biasanya tidak diartikan sebagai teks. Jadi dalam file-file ini, semua nilai byte yang mungkin umumnya ditemukan. Segala sesuatu yang lain akan sia-sia (dan itulah alasan Anda dapat mengompresi teks dengan sangat baik). Format file gambar rumit, dan Anda biasanya tidak melihatnya sebagai teks, sehingga tidak perlu dibaca.

Karena tidak ada interpretasi data umum (set karakter) yang memetakan semua nilai yang mungkin untuk karakter yang dapat dibaca, dan karena itu tidak masuk akal juga (karena itu bukan teks yang dapat dibaca), bagian utama ditampilkan sebagai omong kosong.


Editor heksa memilih representasi yang berbeda untuk data: Ini menampilkan setiap byte sebagai dua digit heksadesimal . Ini hanya representasi yang berbeda, dan satu dengan rangkaian karakter yang mudah dibaca oleh manusia: Semua 256 nilai byte yang mungkin dapat direpresentasikan sebagai dua digit hex.

Karena ada pemetaan yang mudah dari data biner ke hex dan sebaliknya (4 digit biner ke / dari satu digit heksadesimal), dan biner berisi sangat sedikit informasi per digit, heksadesimal umumnya merupakan cara yang disukai manusia untuk membaca biner, kecuali ada yang spesifik alasan untuk memilih representasi yang berbeda.


Beberapa editor teks mungkin memiliki mode hex editor dan beberapa heuristik yang mencoba menentukan apakah suatu file adalah teks atau biner, dan secara otomatis memilih satu mode atau yang lain. Tetapi ini bisa sulit untuk dilakukan dengan benar dan itu bukan properti spesifik dari file yang mengatakan apakah itu satu atau lain jenis.


Beberapa klien FTP meminta Anda untuk menentukan ujung file mana yang digunakan untuk data teks . Program-program ini kemudian akan mengubah konten file agar sesuai dengan OS mesin yang terhubung dengan Anda, karena Windows menggunakan urutan karakter akhir baris yang berbeda ( CR/LF) dari Linux dan Unix (termasuk Mac OS X; LF).

Daniel Beck
sumber
4
Ugh, LF telah menggigitku lebih banyak daripada yang kuingat.
surfasb
32

Karena Anda sudah membukanya di editor teks , bukan editor biner .

Ignacio Vazquez-Abrams
sumber
22
Seperti yang Anda lihat, teks.
Ignacio Vazquez-Abrams
1
Teks sebagai representasi angka heksadesimal (0-f) disusun berpasangan (byte). Jika Anda ingin biner, konversi hex ke biner dalam string nol dan satu yang tidak masuk akal. Hex lebih mudah dibaca manusia dan lebih mudah dipahami.
Fiasco Labs
2
Harus mengatakan bahwa: seseorang harus mengambil langkah berani untuk mengeluarkan editor biner nyata, dengan Ones dan Nol , (dan kemudian mungkin panel terpisah dengan transliterasi hex / char / dec terkait) untuk tujuan tunggal mengajarkan hal-hal semacam ini. Saya tahu mereka tidak boleh, tetapi media populer, dan guru matematika yang berpura-pura tahu komputer, membuat semua harapan salah untuk anak-anak yang ingin belajar.
ZJR
@ZJR: Tidak ada alasan mereka tidak boleh. Banyak hex editor memungkinkan Anda melihat konten file dalam biner. Pemrogram umumnya tidak menganggapnya berguna seperti tampilan heksadesimal, jadi Anda tidak terlalu sering mendengarnya.
David Z
16

Ini semua berkaitan dengan konteks dan interpretasi. Apa yang ada di komputer Anda adalah pola-pola tegangan tinggi dan rendah, atau wilayah yang termagnetisasi dari disk, yang hanya mendapatkan makna ketika kami memutuskan bagaimana kami ingin menafsirkannya.

Dalam keadaan yang berbeda, pola rendah-tinggi-rendah-rendah-rendah-rendah-tinggi mungkin berarti angka 65, huruf kapital 'A', warna biru langit, bahwa pelanggan memesan kopi, tanggal 'Maret 6 atau apa saja, sungguh.

Saat Anda membuka file gambar dalam program grafik, ia tahu untuk menafsirkannya sebagai gambar, tahu pola mana yang menunjukkan format gambar, pola mana yang menunjukkan ukuran gambar dan sebagainya.

Saat Anda membuka file gambar dalam editor teks, file itu diperlakukan sebagai teks. Ini adalah format yang sangat sederhana, lebih dekat dengan apa yang sebenarnya terjadi di komputer, tetapi masih ada beberapa interpretasi yang terjadi. Secara khusus, hampir setiap pola ditafsirkan sebagai karakter tertentu, beberapa normal seperti AZ, tetapi juga beberapa karakter aneh. Beberapa pola tidak muncul sebagai karakter melainkan diperlakukan sebagai format dasar: baris baru, tab.

(Situasinya sedikit rumit oleh hal-hal seperti Unicode dan penyandian teks seperti UTF-8 tapi saya tidak akan berurusan dengan yang ada di sini hanya karena kesederhanaan.)

Ketika Anda memiliki file biner terbuka di editor teks, berhati-hatilah untuk tidak melakukan perubahan, karena hampir semua perubahan yang Anda buat akan benar-benar mengganggu interpretasi normal dari konten file, yaitu akan merusak file dan membuatnya tidak dapat digunakan.

Andrew Turner
sumber
3

Sebagai contoh yang disederhanakan, pertimbangkan file gambar dibuka dengan editor teks.

Gambar adalah pola catur sederhana, dengan lebar kotak 3 piksel dan batas abu-abu 1-piksel antara setiap kotak. - tiga piksel hitam, piksel batas abu-abu, tiga piksel putih, piksel perbatasan abu-abu, ulangi.

Baris pertama dalam gambar itu memiliki nilai berikut empat kali:

Black    Black    Black    Gray     White    White    White    Gray
0x000000 0x000000 0x000000 0x7F7F7F 0xFFFFFF 0xFFFFFF 0xFFFFFF 0c7F7F7F

(Dalam Hex, daripada Binary - string dalam Binary akan empat kali lebih panjang - 0x7F diganti dengan 0b01111111)

Jika Anda memuat string data dalam editor teks, Anda akan mendapatkan teks berikut:

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Del] [Kosong] [Kosong] [Kosong] [Kosong] [Kosong] [Kosong] [Kosong] ] [Kosong] [Kosong] [Kosong] [Kosong] [Del] [Del] [Del]

Ini karena 0x00 adalah kode ASCII untuk nilai Null dan Anda perlu menulis itu 3 kali untuk mendapatkan nilai untuk piksel hitam (dalam BMP 24bit) dan Anda memiliki 3 piksel hitam. Maka 0x7F adalah kode ASCII untuk Hapus, dan Anda perlu ITU tiga kali untuk mendapatkan piksel abu-abu. 0xFF bukan kode ASCII yang valid untuk hal tertentu - bahkan dalam set ASCII yang diperluas - dan Anda perlu menulisnya 9 kali untuk mendapatkan 3 piksel putih. Setelah selesai, Anda mendapatkan tiga Hapus lagi untuk menulis piksel abu-abu.

Cara berbeda untuk menunjukkannya, yang mungkin lebih bermanfaat adalah penjelasan, adalah contoh sebaliknya - APA yang harus Anda tulis ke file untuk mendapatkan angka nol dan angka ketika dibuka di editor teks?

Kode ASCII untuk nol dan satu, tentu saja! Nol dalam editor teks tidak disimpan sebagai bit tunggal dengan nilai 0, disimpan sebagai 8 bit dengan nilai 0b00110000, atau dalam hex 0x30

Kode ASCII untuk '0' adalah 0x30, dan kode ASCII untuk '1' adalah 0x31, jadi jika Anda ingin menyimpan pola catur sebagai angka nol dan angka, file Anda akan terlihat seperti ini:

text editor:
10101010
01010101
10101010
01010101

Stored data (ASCII values for '1', '0' and 'new line'):
0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x0D 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D  0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31

Ada banyak hal yang lebih dari ini - file sudah mulai dan berhenti dan metadata dan semua hal lainnya, tetapi pelajaran yang bisa diambil dan jawaban untuk pertanyaan Anda adalah:

Kecuali 8 bit pertama file Anda adalah 0b00110000, editor teks Anda tidak akan menulis '0' karena itu adalah kode ASCII untuk karakter '0'. Kecuali 8 bit pertama dari file Anda adalah 0b00110001, editor teks Anda tidak akan menulis '1' karena itu adalah kode ASCII untuk karakter '1'.

medivh
sumber
0

Editor tidak cukup pintar untuk mengetahui apakah beberapa teks masuk akal atau tidak, sehingga menampilkan file apa pun sebagai teks kecuali secara khusus diperintahkan untuk melakukan sebaliknya, jika ia memiliki fitur itu. Seperti orang lain tunjukkan, beberapa editor memiliki fitur menampilkan hex.

Emilio M Bumachar
sumber
UltraEdit cukup pintar - ia beralih ke mode edit hex untuk file tersebut.
Peter Mortensen