嘿嘿大家!
我知道这听起来像是一个非常模棱两可的问题,但我认为这是相关的。首先,让我定义一些术语。
二进制
在这个问题中,意思是计算机本身看到的字面上的 1 和 0 - 电气开关的打开和关闭。我知道表示二进制有不同的方式,但这里我指的是 1 和 0。我的意思绝不是 Linux 可执行文件,但据我了解,Linux 可执行文件确实是一个二进制文件,只是当你使用cat
它时,你会得到不同的输出“格式”。再说一遍,我的意思是01010101
。
位、字节和字符
如果您看到我提到这些,请原谅我的不专业。我知道标准 ASCII 字符是8
位或1
字节,但有时它可能适合7
位。我还了解到 UTF-8 字符的范围可以从8
位到位32
、1
字节到4
字节。这基本上就是我对人物的理解。如果我互换使用这些名称,请不要介意,并且请理解,这是我在该领域的理解极限。此外,当我将一个字符称为 8 位时,我的意思是我理解它可以是 32 位,以及上面提到的所有其他陈词滥调参数。
“电脑”
以后我会提到“计算机”这个词。我真正的意思是CPU,以及其他所有带来和获取输出的东西。我知道一台计算机可能有数百万个零件,我知道电源与下面提到的数据无关,但当我提到“计算机”时,我真正指的是CPU和co。
问题
现在我已经把这个问题说出来了,我想第一次回答这个问题。
stdout
原始二进制文件中是否有等效项?
例如,如果我将字母“A”更改为二进制,我将得到01000001
.我假设当计算机看到这个时,它会看到一个“A”。有一整套字母表、十个数字和大量具有二进制表示的字符。这些实际上只是大约 81s
和的组合0s
。
现在,我知道二进制文件实际上是“计算机”的一组指令。当我10岁时,我就明白了这一点。我想知道的是,这些指令的表示是什么?如果我接受01000001
并转换它,我会得到“A”。那么,“stdout”的二进制文件是什么?
编辑:我认为一个很好的表达方式是“1 和 0 的组合是什么来指示计算机输出 xxx(例如,01000001
)”。
老实说,我不确定我是否有道理或想太多。我觉得谈论二进制是计算机语言很愚蠢……但我无法摆脱这个想法。
无论如何,任何能减轻我压力的人都欢迎。提前非常感谢!
答案1
二进制、十六进制、ASCII 甚至 UTF16 和 EBCDIC,都是状态的表示形式。当您将十进制 65(二进制 01000001)写入标准输出这是唯一使它显示为 的约定A
。视觉表示很方便。磁盘上的任何地方都找不到A
存储的地方;您甚至可能找不到二进制表示形式,因为它将以更适合实现的方式存储。
cat /bin/ls > /tmp/myls
chmod a+x /tmp/myls
/tmp/myls
我想你会同意这/bin/ls
是二进制的,cat
上面的命令正在写入标准输出。生成的文件/tmp/myls
可以完美地替代ls
.证明(?)标准输出确实是二进制的。