ทำไมคุณไม่เห็นรหัสไบนารีเมื่อคุณเปิดไฟล์ไบนารีด้วยโปรแกรมแก้ไขข้อความ?


51

ทำไมคุณไม่เห็นรหัสไบนารีเมื่อคุณเปิดไฟล์ไบนารีด้วยโปรแกรมแก้ไขข้อความ? ตัวอย่างเช่นเมื่อฉันเปิดภาพด้วยโปรแกรมแก้ไขข้อความฉันเห็นตัวละครแปลก ๆ และตัวละครที่มนุษย์อ่านได้ แต่รูปภาพควรเข้ารหัสในรูปแบบไบนารี


8
คุณคาดหวังอะไร คุณคิดว่าควรเก็บสิ่งนี้ไว้อย่างไร
Nikodemus RIP

2
ฉันสงสัยว่าทำไมตัวแก้ไขเพิ่มเติมจึงไม่เสนอให้ไบนารีเป็นลำดับ ASCII 1/0 แบบดิบ
Xeoncross

7
@ Xenocross: เนื่องจากลำดับ 0/1 ดิบนั้นไม่มีประโยชน์มันจึงไม่สะดวกสำหรับการถอดรหัสด้วยตนเองเพราะใช้พื้นที่หน้าจอจำนวนมาก โดยทั่วไปแล้วการแสดงผลฐานสิบหกจะดีกว่าสำหรับการถอดรหัสแบบแมนนวล และด้วยการฝึกฝนคุณสามารถแปลเลขฐานสิบหกเป็นเลขฐานสองและกลับกันได้อย่างรวดเร็วและง่ายดาย
Lie Ryan

3
@Fiasco Labs: Pedantry: เลขฐานสิบหกหนึ่งเลขสองหลัก - 00 ถึง FF ซึ่งแปลเป็นทศนิยม 0 - 255 (8 บิตคิดเป็น 2 ^ 8 = 256 สถานะที่เป็นไปได้)
Piskvor

1
@Piskvor - ขอบคุณที่ทำให้ดีกว่าที่ฉันทำ deadbeef เป็นตัวเลขฐานสิบหกที่มี 8 หลักสำหรับการบันทึก ; ^)
Fiasco Labs

คำตอบ:


83

ไบนารีและข้อความข้อมูลจะถูกแยกออกจากกันไม่ได้: พวกเขาเป็นเพียงข้อมูล ขึ้นอยู่กับการตีความที่ทำให้พวกเขาหนึ่งหรืออื่น ๆ หากคุณเปิดข้อมูลไบนารี (เช่นไฟล์รูปภาพ) ในโปรแกรมแก้ไขข้อความส่วนใหญ่จะไม่สมเหตุสมผลเพราะมันไม่เหมาะกับการตีความที่คุณเลือก(เช่นข้อความ)

สิ่งที่คุณเรียกว่าข้อความเป็นส่วนย่อยของเนื้อหาไฟล์ที่เป็นไปได้: ข้อมูลที่อยู่ในชุดอักขระที่กำหนดแปลเป็นอักขระที่อ่านได้

ยกตัวอย่างเช่นในASCII , คุณจะเห็นว่าของ 128 "อนุญาต" ค่าเพียงประมาณครึ่งหนึ่งเป็นตัวอักษรและตัวเลข 30 วรรคตอนและส่วนที่เหลือเป็นตัวควบคุม กลุ่มหลังไม่ได้ใช้ไฟล์ข้อความบ่อยนักและพวกมันก็ไม่ได้เป็นตัวแทนที่ดีเลย บางคนก็มีแท็บและนิวไลน์ตัวอักษรที่บรรณาธิการข้อความแล้วต้องได้รับความคิดสร้างสรรค์ในการแสดงพวกเขา

โปรแกรมแก้ไขข้อความบางตัวมีตัวเลือกให้แสดงช่องว่างอย่างชัดเจน จากนั้นพวกเขาจะถูกวาดเป็นตัวละครนอกเหนือจากพฤติกรรมการจัดรูปแบบปกติของพวกเขา(ซึ่งเป็นเพียงการตีความตัวละครเหล่านี้)

Pure ASCII ตีความเฉพาะค่า 128 เท่านั้น ไบต์ที่ใช้ในการจัดเก็บข้อมูลนี้มีค่าที่เป็นไปได้ 256 ค่าแต่ละค่าดังนั้นครึ่งหนึ่งของค่าที่เป็นไปได้จะไม่ได้รับอนุญาตใน ASCII สิ่งเหล่านี้ถูกใช้ในชุดอักขระเฉพาะภูมิภาคเช่นละติน 1 แต่ใน ASCII จะไม่ได้กำหนด ไม่มีการแสดงที่เป็นประโยชน์ในตัวแสดงข้อความที่สามารถจัดการ ASCII ได้เท่านั้น


ข้อมูลไบนารีมักไม่ถูกตีความว่าเป็นข้อความ ดังนั้นในไฟล์เหล่านี้จึงพบค่าไบต์ที่เป็นไปได้ทั้งหมด ทุกอย่างอื่นจะสิ้นเปลือง (และนั่นคือเหตุผลที่คุณสามารถบีบอัดข้อความได้ดีมาก) รูปแบบไฟล์ภาพมีความซับซ้อนและโดยปกติคุณไม่ได้ดูเป็นข้อความดังนั้นจึงไม่จำเป็นต้องอ่าน

เนื่องจากไม่มีการตีความข้อมูลทั่วไป (ชุดอักขระ) ที่แมปค่าที่เป็นไปได้ทั้งหมดกับตัวอักษรที่อ่านได้และเนื่องจากมันไม่สมเหตุสมผลนัก


ตัวแก้ไขฐานสิบหกเลือกการแสดงที่แตกต่างกันสำหรับข้อมูล: มันจะแสดงแต่ละไบต์เป็นเลขฐานสิบหกสองหลัก เป็นเพียงการนำเสนอที่แตกต่างกันและเป็นหนึ่งเดียวกับชุดอักขระที่มนุษย์สามารถอ่านได้ง่าย: 256 ไบต์ที่เป็นไปได้ทั้งหมดสามารถแสดงเป็นเลขฐานสิบหกสองหลัก

เนื่องจากมีการแมปข้อมูลไบนารีที่ง่ายไปยังฐานสิบหกและในทางกลับกัน (เลขฐานสอง 4 หลักไปยัง / จากเลขฐานสิบหกหลักหนึ่ง) และฐานสองมีข้อมูลน้อยมากต่อหลักฐานสิบหกจึงเป็นวิธีที่มนุษย์ต้องการอ่านไบนารี เหตุผลที่ชอบการเป็นตัวแทนที่แตกต่างกัน


โปรแกรมแก้ไขข้อความบางตัวอาจมีโหมดตัวแก้ไขฐานสิบหกและฮิวริสติกบางส่วนที่พยายามระบุว่าไฟล์เป็นข้อความหรือไบนารีและเลือกโหมดหนึ่งโดยอัตโนมัติหรือโหมดอื่น แต่มันอาจเป็นเรื่องยากที่จะทำให้ถูกต้องและไม่ใช่คุณสมบัติเฉพาะของไฟล์ที่ระบุว่าเป็นประเภทใดชนิดหนึ่ง


บาง FTP ลูกค้าขอให้คุณระบุว่าตอนจบไฟล์ที่ใช้สำหรับข้อมูลที่เป็นข้อความ โปรแกรมเหล่านี้จะเปลี่ยนเนื้อหาไฟล์ให้ตรงกับระบบปฏิบัติการของเครื่องที่คุณเชื่อมต่อเนื่องจาก Windows ใช้ลำดับอักขระที่ลงท้ายด้วยบรรทัดที่แตกต่างกัน ( CR/LF) มากกว่า Linux และ Unix (รวมถึง Mac OS X; LF)


4
อืม LF ได้กัดฉันหลายครั้งกว่าที่ฉันจะจำได้
surfasb

32

เพราะคุณได้เปิดไว้ในข้อความที่แก้ไขไม่ได้เป็นไบนารีบรรณาธิการ


22
ตามที่คุณเห็นข้อความ
Ignacio Vazquez-Abrams

1
ข้อความที่ใช้แทนตัวเลขฐานสิบหก (0-f) ที่จัดเรียงเป็นคู่ (ไบต์) ถ้าคุณต้องการเลขฐานสองให้แปลงฐานสิบหกเป็นเลขฐานสองในสตริงที่ไม่มีเหตุผล Hex เป็นมนุษย์ที่อ่านง่ายขึ้นและเข้าใจได้ง่ายขึ้น
Fiasco Labs

2
ต้องบอกว่า: ใครบางคนควรทำตามขั้นตอนที่กล้าหาญในการวางเครื่องมือแก้ไขไบนารีจริงด้วยOnes และ Zeros (และจากนั้นอาจแยกบานหน้าต่างที่มีตัวแปล hex / char / dec ที่เกี่ยวข้อง) เพื่อจุดประสงค์เดียวในการสอนสิ่งนี้ ฉันรู้ว่าพวกเขาไม่ควร แต่สื่อยอดนิยมและครูคณิตศาสตร์แกล้งรู้จักคอมพิวเตอร์ตั้งค่าความคาดหวังทั้งหมดที่ผิดสำหรับเด็กที่กระตือรือร้นที่จะเรียนรู้
ZJR

@ZJR: ไม่มีเหตุผลที่พวกเขาไม่ควร โปรแกรมแก้ไข hex หลายตัวอนุญาตให้คุณดูเนื้อหาไฟล์ในรูปแบบไบนารี โปรแกรมเมอร์มักไม่ค่อยพบว่ามันมีประโยชน์เหมือนกับมุมมองเลขฐานสิบหกดังนั้นคุณจึงไม่ได้ยินเรื่องนี้มากนัก
David Z

16

ทุกอย่างเกี่ยวข้องกับบริบทและการตีความ สิ่งที่อยู่ในคอมพิวเตอร์ของคุณคือรูปแบบของแรงดันไฟฟ้าสูงและต่ำหรือภูมิภาคแม่เหล็กของดิสก์ที่ได้รับความหมายเฉพาะเมื่อเราตัดสินใจว่าเราต้องการตีความอย่างไร

ภายใต้สถานการณ์ที่แตกต่างกันรูปแบบ low-high-low-low-low-low-low อาจหมายถึงหมายเลข 65 ตัวพิมพ์ใหญ่ 'A' ซึ่งเป็นสีฟ้าที่ลูกค้าสั่งกาแฟวันที่ 'มีนาคม 6th 'หรืออะไรก็ได้เลยจริงๆ

เมื่อคุณเปิดไฟล์ภาพของคุณในโปรแกรมกราฟิกมันจะรู้ว่าตีความมันเป็นภาพรู้ว่ารูปแบบใดที่บ่งบอกถึงรูปแบบภาพซึ่งรูปแบบใดที่บ่งบอกถึงขนาดของรูปภาพและอื่น ๆ

เมื่อคุณเปิดไฟล์ภาพของคุณในโปรแกรมแก้ไขข้อความไฟล์นั้นจะได้รับการปฏิบัติเหมือนเป็นข้อความ นี่เป็นรูปแบบที่ง่ายมากใกล้กับสิ่งที่เกิดขึ้นจริงในคอมพิวเตอร์ แต่ก็ยังมีการตีความเกิดขึ้น โดยเฉพาะอย่างยิ่งเกือบทุกรูปแบบได้รับการตีความว่าเป็นตัวละครเฉพาะบางอย่างปกติเช่น AZ แต่ยังมีตัวละครแปลก ๆ รูปแบบบางอย่างไม่แสดงเป็นอักขระ แต่จะถือเป็นการจัดรูปแบบพื้นฐาน: ขึ้นบรรทัดใหม่แท็บ

(สถานการณ์มีความซับซ้อนเล็กน้อยโดยสิ่งต่าง ๆ เช่น Unicode และการเข้ารหัสข้อความเช่น UTF-8 แต่ฉันจะไม่จัดการกับสิ่งเหล่านี้ที่นี่เพื่อความเรียบง่าย)

เมื่อคุณเปิดไฟล์ไบนารีในโปรแกรมแก้ไขข้อความโปรดระวังอย่าเปลี่ยนแปลงเนื่องจากการเปลี่ยนแปลงใด ๆ ที่คุณทำจะส่งผลกระทบต่อการตีความปกติของเนื้อหาไฟล์นั่นคือมันจะทำลายไฟล์และทำให้มันใช้ไม่ได้


3

เป็นตัวอย่างที่ง่ายพิจารณาไฟล์รูปภาพที่เปิดด้วยโปรแกรมแก้ไขข้อความ

ภาพนี้เป็นรูปแบบหมากรุกอย่างง่ายโดยมีความกว้าง 3 พิกเซลและสี่เหลี่ยมสีเทา 1 พิกเซลระหว่างแต่ละตาราง - สามพิกเซลสีดำ, พิกเซลขอบสีเทา, พิกเซลสีขาวสามพิกเซล, พิกเซลขอบสีเทา, ทำซ้ำ

บรรทัดแรกในภาพนั้นจะมีค่าต่อไปนี้สี่ครั้ง:

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

(ใน Hex แทนที่จะเป็นไบนารี - สตริงใน Binary จะยาวสี่เท่า - 0x7F จะถูกแทนที่ด้วย 0b01111111)

หากคุณโหลดสตริงของข้อมูลนั้นในเท็กซ์เอดิเตอร์คุณจะได้รับข้อความต่อไปนี้:

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Blank] [Blank] [Blank] [Blank] [เปล่า ] [Blank] [Blank] [Blank] [Blank] [Del] [Del] [Del]

นี่เป็นเพราะ 0x00 เป็นรหัส ASCII สำหรับค่า Null และคุณต้องเขียน 3 ครั้งเพื่อรับค่าพิกเซลสีดำ (ใน 24 บิต BMP ต่อไป) และคุณมี 3 พิกเซลสีดำ จากนั้น 0x7F เป็นรหัส ASCII สำหรับลบและคุณต้องใช้สามครั้งเพื่อรับพิกเซลสีเทา 0xFF ไม่ใช่รหัส ASCII สำหรับทุกสิ่งโดยเฉพาะแม้แต่ในชุด ASCII แบบขยาย - และคุณต้องเขียนมัน 9 ครั้งเพื่อให้ได้ 3 พิกเซลสีขาว คุณจะได้รับการลบอีกสามครั้งเพื่อเขียนพิกเซลสีเทา

วิธีที่แตกต่างในการแสดงซึ่งอาจอธิบายได้อย่างมีประโยชน์มากกว่าเป็นตัวอย่างย้อนกลับ - คุณต้องเขียนอะไรลงไฟล์เพื่อให้ได้ศูนย์และวัตถุเมื่อเปิดในโปรแกรมแก้ไขข้อความ

รหัส ASCII สำหรับศูนย์และหนึ่งแน่นอน! ศูนย์ในตัวแก้ไขข้อความจะไม่ถูกจัดเก็บเป็นบิตเดียวที่มีค่า 0 แต่จะถูกเก็บไว้เป็น 8 บิตที่มีค่า 0b00110000 หรือใน hex 0x30

รหัส ASCII สำหรับ '0' คือ 0x30 และรหัส ASCII สำหรับ '1' คือ 0x31 ดังนั้นหากคุณต้องการจัดเก็บรูปแบบหมากรุกเป็นเลขศูนย์และเลขที่ไฟล์ของคุณจะมีลักษณะดังนี้:

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

มีมากไปกว่านี้ - ไฟล์มีการเริ่มต้นและหยุดและเมตาดาต้าและทุกชนิดอื่น ๆ แต่บทเรียน takehome และคำตอบสำหรับคำถามของคุณคือ:

เว้นแต่ว่า 8 บิตแรกของไฟล์ของคุณคือ 0b00110000 ตัวแก้ไขข้อความของคุณจะไม่เขียน '0' เพราะนั่นคือรหัส ASCII สำหรับอักขระ '0' นอกจาก 8 บิตแรกของไฟล์ของคุณคือ 0b00110001 โปรแกรมแก้ไขข้อความของคุณจะไม่เขียน '1' เพราะนั่นคือรหัส ASCII สำหรับอักขระ '1'


0

ตัวแก้ไขไม่ฉลาดพอที่จะคิดว่าข้อความบางข้อความมีเหตุผลหรือไม่ดังนั้นจึงแสดงไฟล์ใด ๆ เป็นข้อความยกเว้นว่ามีการบอกเป็นอย่างอื่นโดยเฉพาะหากมีคุณลักษณะนั้น ตามที่คนอื่น ๆ ชี้ให้เห็นบรรณาธิการบางคนมีคุณสมบัติในการแสดงฐานสิบหก


UltraEdit ฉลาดพอที่จะเปลี่ยนเป็นโหมดแก้ไขเลขฐานสิบหกสำหรับไฟล์ดังกล่าว
ปีเตอร์มอร์เทนเซ่น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.