Tại sao bạn không thấy mã nhị phân khi bạn mở tệp nhị phân bằng trình soạn thảo văn bản?


51

Tại sao bạn không thấy mã nhị phân khi bạn mở tệp nhị phân bằng trình soạn thảo văn bản? Ví dụ, khi tôi mở một hình ảnh bằng trình soạn thảo văn bản, tôi thấy một số ký tự lạ và cả một số ký tự có thể đọc được của con người; nhưng hình ảnh nên được mã hóa ở dạng nhị phân.


8
Bạn mong đợi điều gì? Làm thế nào để bạn nghĩ rằng điều này nên được lưu trữ?
Nikodemus RIP

2
Tôi tự hỏi tại sao nhiều biên tập viên không cung cấp cho nhị phân dưới dạng chuỗi ASCII 1/0 thô.
Xeoncross

7
@Xenacer: vì chuỗi 0/1 thô là vô dụng, quá khó để giải mã thủ công vì chúng chiếm một lượng không gian màn hình rất lớn; hiển thị hex thường tốt hơn để giải mã thủ công. Và với một số đào tạo, bạn có thể dịch hex sang nhị phân và ngược lại một cách nhanh chóng và dễ dàng.
Lie Ryan

3
@Fiasco Labs: Pedantry: một số hex có hai chữ số - 00 đến FF, dịch thành số thập phân 0 - 255 (8 bit đại diện cho 2 ^ 8 = 256 trạng thái có thể).
Piskvor

1
@Piskvor - Cảm ơn bạn đã đặt nó tốt hơn tôi đã làm. deadbeef là một số hex có 8 chữ số, cho hồ sơ. ; ^)
Phòng thí nghiệm Fiasco

Câu trả lời:


83

Dữ liệu nhị phânvăn bản không được tách riêng: Chúng chỉ đơn giản là dữ liệu . Nó phụ thuộc vào cách giải thích làm cho chúng cái này hay cái khác. Nếu bạn mở dữ liệu nhị phân (chẳng hạn như tệp hình ảnh) trong trình chỉnh sửa văn bản, phần lớn dữ liệu sẽ không có ý nghĩa, vì nó không phù hợp với cách hiểu của bạn (dưới dạng văn bản).

Những gì bạn gọi văn bản là một tập hợp con của nội dung tệp có thể: Dữ liệu trong một bộ ký tự đã cho sẽ dịch thành các ký tự có thể đọc được.

Ví dụ: trong ASCII , bạn có thể thấy rằng, trong số 128 giá trị "được phép", chỉ khoảng một nửa là chữ cái và số, 30 là dấu chấm câu và phần còn lại là ký tự điều khiển . Nhóm thứ hai không được sử dụng nhiều trong các tệp văn bản và chúng không có biểu diễn văn bản thực sự tốt. Một số trong số chúng là các ký tự TabNewline , trong đó các trình soạn thảo văn bản đã cần sáng tạo trong việc hiển thị chúng.

Một số trình soạn thảo văn bản có các tùy chọn để hiển thị rõ ràng khoảng trắng. Sau đó, họ thực sự sẽ được vẽ dưới dạng các ký tự, ngoài hành vi định dạng thông thường của họ (đó cũng chỉ là cách giải thích của các ký tự này).

ASCII thuần túy chỉ diễn giải 128 giá trị. Các byte được sử dụng để lưu trữ thông tin này có 256 giá trị có thể mỗi, vì vậy một nửa giá trị có thể không được phép trong ASCII. Chúng được sử dụng trong các bộ ký tự theo vùng cụ thể, chẳng hạn như Latin 1, nhưng trong ASCII, chúng không được xác định. Chúng không có biểu diễn hữu ích trong trình xem văn bản chỉ có thể xử lý ASCII.


Dữ liệu nhị phân thường không được hiểu là văn bản. Vì vậy, trong các tệp này, tất cả các giá trị byte có thể thường được tìm thấy. Mọi thứ khác sẽ lãng phí (và đó là lý do bạn có thể nén văn bản rất tốt). Các định dạng tệp hình ảnh rất phức tạp và bạn thường không xem chúng dưới dạng văn bản, vì vậy chúng không cần phải đọc được.

Vì không có cách hiểu dữ liệu chung (bộ ký tự) ánh xạ tất cả các giá trị có thể thành các ký tự có thể đọc được và vì dù sao nó cũng không có ý nghĩa gì (vì nó không phải là văn bản có thể đọc được), các phần chính được hiển thị là vô nghĩa.


Một trình soạn thảo hex chọn một biểu diễn khác nhau cho dữ liệu: Nó hiển thị mỗi byte dưới dạng hai chữ số thập lục phân . Nó chỉ là một biểu diễn khác nhau và một biểu tượng có bộ ký tự dễ đọc với con người: Tất cả 256 giá trị byte có thể có thể được biểu diễn dưới dạng hai chữ số hex.

Vì có một ánh xạ dễ dàng của dữ liệu nhị phân thành hex và ngược lại (4 chữ số nhị phân đến / từ một chữ số thập lục phân), và nhị phân chứa rất ít thông tin trên mỗi chữ số, thập lục phân thường là cách ưa thích để con người đọc nhị phân, trừ khi có cụ thể lý do để thích một đại diện khác nhau.


Một số trình soạn thảo văn bản có thể có chế độ soạn thảo hex và một số heuristic đã cố gắng xác định xem một tệp là văn bản hay nhị phân và tự động chọn một chế độ này hay chế độ khác. Nhưng điều này có thể khó thực hiện đúng và nó không phải là một thuộc tính cụ thể của tệp cho biết đó là loại này hay loại khác.


Một số máy khách FTP yêu cầu bạn chỉ định kết thúc tệp nào được sử dụng cho dữ liệu văn bản . Các chương trình này sau đó sẽ thay đổi nội dung tệp để phù hợp với HĐH của máy bạn được kết nối, vì Windows sử dụng một chuỗi ký tự kết thúc dòng khác ( CR/LF) so với Linux và Unix (bao gồm cả Mac OS X; LF).


4
Ughh, LF đã cắn tôi nhiều lần hơn tôi nhớ.
Surfasb

32

Bởi vì bạn đã mở nó trong một trình soạn thảo văn bản , không phải là một trình soạn thảo nhị phân .


22
Như bạn đã thấy, văn bản.
Ignacio Vazquez-Abrams

1
Văn bản dưới dạng đại diện cho các số thập lục phân (0 - f) được sắp xếp theo cặp (byte). Nếu bạn muốn nhị phân, chuyển đổi hex thành nhị phân trong một chuỗi số không và số vô nghĩa. Hex dễ đọc hơn và dễ hiểu hơn.
Phòng thí nghiệm Fiasco

2
Gotta nói rằng: ai đó nên thực hiện bước đi táo bạo để đưa ra một trình soạn thảo nhị phân thực, với Ones và Zeros , (và sau đó có thể tách các bảng với các dịch thuật hex / char / dec liên quan) cho mục đích duy nhất là dạy loại công cụ này. Tôi biết họ không nên, nhưng các phương tiện truyền thông phổ biến và các giáo viên toán học giả vờ biết máy tính, đặt ra tất cả các kỳ vọng sai cho những đứa trẻ háo hức muốn học.
ZJR

@ZJR: Không có lý do gì họ không nên. Nhiều trình soạn thảo hex cho phép bạn xem nội dung tệp ở dạng nhị phân. Các lập trình viên thường không thấy nó hữu ích như chế độ xem thập lục phân, vì vậy bạn không nghe về nó nhiều như vậy.
David Z

16

Đó là tất cả để làm với bối cảnh và giải thích. Những gì trong máy tính của bạn là các mẫu điện áp cao và thấp, hoặc các vùng từ hóa của đĩa, chỉ có ý nghĩa khi chúng ta quyết định cách chúng ta muốn diễn giải chúng.

Trong các trường hợp khác nhau, mẫu thấp-thấp-thấp-thấp-thấp-thấp-cao có thể có nghĩa là số 65, chữ in hoa 'A', màu xanh da trời, mà một khách hàng đã đặt mua cà phê, ngày 'tháng ba Thứ 6 'hoặc bất cứ điều gì cả, thực sự.

Khi bạn mở tệp hình ảnh của mình trong một chương trình đồ họa, nó sẽ hiểu nó là hình ảnh, biết mẫu nào biểu thị định dạng hình ảnh, mẫu nào biểu thị kích thước hình ảnh, v.v.

Khi bạn mở tệp hình ảnh của mình trong trình chỉnh sửa văn bản, nó sẽ được coi là văn bản. Đây là một định dạng rất đơn giản, gần với những gì thực sự xảy ra trong máy tính, nhưng vẫn có một số giải thích đang diễn ra. Cụ thể, gần như mọi mẫu được hiểu là một ký tự cụ thể, một số bình thường như AZ, nhưng cũng có một số ký tự lạ. Một vài mẫu không hiển thị dưới dạng ký tự mà thay vào đó được coi là định dạng cơ bản: dòng mới, tab.

(Tình hình hơi phức tạp bởi những thứ như mã hóa Unicode và văn bản như UTF-8 nhưng tôi sẽ không giải quyết những vấn đề ở đây vì đơn giản.)

Khi bạn mở tệp nhị phân trong trình soạn thảo văn bản, chú ý không thực hiện thay đổi, vì hầu như mọi thay đổi bạn thực hiện sẽ phá vỡ hoàn toàn việc diễn giải bình thường nội dung của tệp, nghĩa là nó sẽ làm hỏng tệp và khiến nó không sử dụng được.


3

Như một ví dụ đơn giản, hãy xem xét một tệp hình ảnh được mở bằng trình soạn thảo văn bản.

Hình ảnh là một mẫu cờ đơn giản, với các ô vuông rộng 3 pixel và viền màu xám 1 pixel giữa mỗi ô vuông. - ba pixel đen, pixel viền xám, ba pixel trắng, pixel viền xám, lặp lại.

Dòng đầu tiên trong hình ảnh đó sẽ có giá trị sau bốn lần:

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

(Trong Hex, thay vì Binary - chuỗi trong Binary sẽ dài gấp bốn lần - 0x7F được thay thế bằng 0b01111111)

Nếu bạn tải chuỗi dữ liệu đó trong trình soạn thảo văn bản, bạn sẽ nhận được văn bản sau:

[Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Nul] [Del] [Del] [Del] [Trống] [Trống] [Trống] [Trống] [Trống] ] [Trống] [Trống] [Trống] [Trống] [Del] [Del] [Del]

Điều này là do 0x00 là mã ASCII cho giá trị Null và bạn cần viết 3 lần để nhận giá trị cho pixel đen (Dù sao trong BMP 24 bit) và bạn có 3 pixel đen. Thì 0x7F là mã ASCII cho Xóa và bạn cần THAT ba lần để có được một pixel màu xám. 0xFF không coi trọng mã ASCII cho bất kỳ thứ gì cụ thể - ngay cả trong bộ ASCII mở rộng - và bạn cần viết nó 9 lần để có 3 pixel trắng. Kết thúc nó, bạn có thêm ba Xóa để viết một pixel màu xám.

Một cách khác để hiển thị nó, có thể giải thích hữu ích hơn, là ví dụ ngược lại - bạn phải viết gì vào một tệp để có được số không và số khi mở trong trình soạn thảo văn bản?

Các mã ASCII cho số không và một, tất nhiên! Số 0 trong trình soạn thảo văn bản không được lưu dưới dạng một bit có giá trị 0, nó được lưu dưới dạng 8 bit có giá trị 0b00110000 hoặc ở dạng hex 0x30

Mã ASCII cho '0' là 0x30 và mã ASCII cho '1' là 0x31, vì vậy nếu bạn muốn lưu trữ mẫu cờ dưới dạng số 0 và số, tệp của bạn sẽ trông như thế này:

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

Có rất nhiều điều hơn thế này - các tệp đã bắt đầu và dừng và siêu dữ liệu và tất cả các loại khác, nhưng bài học và câu trả lời hấp dẫn cho câu hỏi của bạn là:

Trừ khi 8 bit đầu tiên của tệp của bạn là 0b00110000, trình soạn thảo văn bản của bạn sẽ không ghi '0' vì đó là mã ASCII cho ký tự '0'. Trừ khi 8 bit đầu tiên xuất hiện khi tệp của bạn là 0b00110001, trình soạn thảo văn bản của bạn sẽ không ghi '1' vì đó là mã ASCII cho ký tự '1'.


0

Trình chỉnh sửa không đủ thông minh để tìm hiểu xem một số văn bản có ý nghĩa hay không, vì vậy nó sẽ hiển thị bất kỳ tệp nào dưới dạng văn bản trừ khi được yêu cầu cụ thể làm khác, nếu nó có tính năng đó. Như những người khác chỉ ra, một số biên tập viên có tính năng hiển thị hex.


UltraEdit đủ thông minh - nó chuyển sang chế độ chỉnh sửa hex cho các tệp như vậy.
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.