Những gì được tạo ra sau khi sử dụng con mèo trên một hình ảnh?


9

Giả sử người ta tạo một tệp như vậy:

touch myFile

Bạn nhập một số văn bản trong đó bằng vim hoặc bất cứ điều gì, và sau đó sử dụng cat myFileđể nhổ nội dung ra vào thiết bị đầu cuối.

Bây giờ, điều gì xảy ra khi tôi sử dụng con mèo trên bất kỳ hình ảnh nào? Nói,

cat myPNG.png

Tôi chỉ nhận được một đống rác. Nó chỉ khiến tôi suy nghĩ về những gì catlệnh đang cố gắng thực hiện, và tất cả "rác" này đến từ đâu. Chỉ tò mò thôi.

Câu trả lời:


22

Có thể hữu ích để giải thích cách các tệp hoạt động ở mức thấp nhất:

Một tệp là một luồng byte, có độ dài bằng 0 hoặc nhiều hơn. Một byte là 8 bit. Vì có 256 kết hợp 8 bit, điều đó có nghĩa là một byte là bất kỳ số nào từ 0 đến 255. Vì vậy, mỗi tệp ở mức thấp nhất của nó là một khối lớn các số từ 0 đến 255.

Nó hoàn toàn phụ thuộc vào các chương trình và người dùng để quyết định những con số "có nghĩa là gì". Nếu chúng ta muốn lưu trữ văn bản, thì có lẽ nên sử dụng các số làm mã, trong đó mỗi số được gán một chữ cái. Đó là những gì ASCII và Unicode làm. Nếu chúng ta muốn hiển thị văn bản, thì có lẽ nên xây dựng một thiết bị hoặc viết chương trình có thể lấy các số này và hiển thị một bitmap trông giống như mã ASCII / Unicode tương ứng. Đó là những gì thiết bị đầu cuối và trình giả lập thiết bị đầu cuối làm.

Tất nhiên, đối với đồ họa, có lẽ chúng ta muốn các con số đại diện cho pixel và màu sắc của chúng. Sau đó, chúng ta sẽ cần một chương trình đi qua tệp, đọc tất cả các byte và hiển thị hình ảnh tương ứng. Trình giả lập thiết bị đầu cuối đang mong đợi các byte là số ASCII / Unicode và sẽ hoạt động khác nhau, cho cùng một đoạn byte (hoặc tệp).


Giải thích tuyệt vời! Vui mừng bạn đã đi xuống mức thấp nhất.
Qcom

2
@BOSS Tôi sẽ đưa ra định nghĩa của một chút. Một bit là một DIgit nhị phân hoặc một số có thể là một hoặc một số không. Một bit có hai khả năng hoặc 2 ^ 1 = 2. Hai bit có thể có bốn kết hợp hoặc 2 × 2 = 4. Chính xác hơn, đó là 2² = 4 cho 2 chữ số. 8 Số nhị phân hoặc bit có thể có 2 ^ 8 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 256 kết hợp có thể.
chim cánh cụt359

2
Nhỏ nitpick / pedantry: một byte có kích thước tùy ý. Bạn có thể gặp các tình huống trong đó nó không rộng 8 bit. "Octet" là thuật ngữ ưa thích.
Chris Down

9

Cat chuyển nội dung của tệp đầu vào thành đầu ra tiêu chuẩn, trong trường hợp này là một thiết bị văn bản: cửa sổ đầu cuối của bạn. Vì một hình ảnh bao gồm dữ liệu nhị phân, những gì bạn đang thấy là dữ liệu nhị phân thô được diễn giải như thể đó là văn bản ASCII. Ví dụ: một byte có giá trị 65 sẽ được hiển thị là chữ hoa A, 66 là chữ hoa chữ B, v.v. Nếu bạn mở tệp bằng một ứng dụng có khả năng diễn giải tệp hình ảnh chính xác, nội dung nhị phân của tệp sẽ được hiển thị như một hình ảnh.


OK, tuyệt. Cảm ơn câu trả lời. Bạn đề cập đến một "chế độ văn bản". Có các chế độ khác cho một thiết bị đầu cuối tiêu chuẩn? Hoặc, là cách duy nhất khác để diễn giải nó như bạn đã nói, thông qua một ứng dụng có thể hiển thị đúng kiểu tệp đó?
Qcom

4
@BOSS, không, tôi tin rằng gordoco muốn nói rằng thiết bị đầu cuối là một thiết bị văn bản. Mục đích ban đầu catlà đặt các tệp cùng nhau như trong cat filea fileb > filec, nếu bạn không chuyển qua thiết bị đầu cuối (như trong ví dụ này) thì việc tập tin đó là văn bản hay nhị phân không thành vấn đề. Trong thế giới unix, các tệp nhị phân và văn bản được lưu trữ giống nhau, chỉ các tệp văn bản chứa một tập hợp byte bị hạn chế. Một cách sử dụng phổ biến của cat là hướng nội dung tệp vào các lệnh không lấy tên tệp làm tham số, nhưng chấp nhận đầu vào từ đầu vào tiêu chuẩn.
asoundmove

@BOSS, nói rằng một tệp là một tệp văn bản trái ngược với nhị phân, chỉ có nghĩa là nội dung nhị phân của tệp có thể được hiểu là văn bản. Mọi thứ thường đơn giản, hoặc là tệp ASCII hoặc không. Ngày nay, tệp có thể là một số định dạng văn bản khác nhau, bao gồm ASCII, UTF8, UTF16 ... Trên ổ cứng, tất cả chúng đều là nhị phân.
asoundmove

@asoundmove: Bạn đã đúng, tôi nên nói thiết bị văn bản, thay vì thuật ngữ "chế độ văn bản" mơ hồ. Tôi đã chỉnh sửa phản hồi của mình.
tung hứng

Tôi đã sử dụng con mèo trên một bitmap ngay bây giờ và nó được in ra thiết bị đầu cuối không chỉ là biểu tượng ascii, mà còn cả các ký tự unicode (như "" và ""). Có ai biết vì sao lại thế này không?
Magnus
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.