在图像上使用猫之后会产生什么?


9

假设有人创建了一个像这样的文件:

touch myFile

您可以使用vim或其他内容在其中输入一些文本,然后将cat myFile其吐出到终端中。

现在,当我在任何图像上使用猫时会发生什么?说,

cat myPNG.png

我只是一堆垃圾。它只是让我考虑该cat命令正在尝试执行的操作,以及所有这些“垃圾”来自何处。只是好奇。

Answers:


22

解释文件如何在最低级别工作可能会很有用:

文件是字节流,长度为零或更多。字节为8位。由于存在8位的256种组合,这意味着字节是0到255之间的任何数字。因此,每个文件在其最低级别上都是从0到255的大量数字。

程序和用户完全可以决定数字的“含义”。如果我们要存储文本,则最好将数字用作代码,其中每个数字都分配有一个字母。这就是ASCII和Unicode的作用。如果我们要显示文本,那么最好构建一个设备或编写一个可以使用这些数字并显示类似于相应ASCII / Unicode代码的位图的程序。终端和终端仿真器就是这样做的。

当然,对于图形,我们可能希望数字代表像素及其颜色。然后,我们需要一个程序来遍历文件,读取所有字节,并相应地渲染图片。终端仿真器期望字节为ASCII / Unicode数字,并且对于相同的字节块(或文件),其行为将有所不同。


极好的解释!很高兴您跌至最低水平。
Qcom 2011年

2
@BOSS我要介绍一下定义。位是二进制数字或数字,可以是1或0。一位有两种可能性,即2 ^ 1 = 2。两位可以具有四个组合或2×2 = 4。更正确地说,2位数字是2²= 4。8个二进制数字或位可以具有2 ^ 8 = 2×2×2×2×2×2×2×2×2 = 256个可能的组合。
penguin359 2011年

2
次要nitpick / pedantry:字节大小是任意的。您可能会遇到它不是8位宽的情况。“ Octet”是首选术语。
克里斯·

9

Cat将输入文件的内容转储到标准输出,在这种情况下,该输出是文本设备:您的终端窗口。由于图像由二进制数据组成,因此您看到的是原始二进制数据,将其解释为ASCII文本。例如,值65的字节将显示为大写A,66将显示为大写B,等等。如果使用能够正确解释图像文件的应用程序打开文件,则将显示文件的二进制内容作为图像。


嗯不错。感谢您的回答。您提到了“文本模式”。标准终端还有其他模式吗?或者,是通过可以正确呈现该文件类型的应用程序来像您所说的那样解释它的唯一其他方法吗?
Qcom 2011年

4
@BOSS,不,我相信gordoco的意思是说终端是一个文本设备。的原始目的cat是像中一样将文件放在一起cat filea fileb > filec,如果您不通过终端进行传输(如本例所示),则文件是文本还是二进制都没有关系。在Unix世界中,二进制文件和文本文件存储相同,只有文本文件包含一些受限制的字节集。cat的常见用法是将文件内容定向到一些命令,这些命令不以文件名作为参数,而是接受来自标准输入的输入。
asoundmove 2011年

@BOSS表示文件是文本文件,而不是二进制文件,仅表示文件的二进制内容可以解释为文本。事情曾经很简单,要么文件是ASCII,要么不是。如今,文件可以是多种不同的文本格式,包括ASCII,UTF8,UTF16 ...在硬盘驱动器上,它们都是二进制的。
asoundmove

@asoundmove:是的,我应该说文本设备,而不是模棱两可的术语“文本模式”。我已经编辑了我的回复。
杂耍演员

我刚才在位图上使用了cat,它不仅打印了ascii符号,还打印了unicode字符(例如“ڣ”和“漥”)。知道为什么会这样吗?
马格努斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.