7

我最近一直在思考计算机硬件必须做什么样的工作才能产生我们期望的东西。

比较文本和颜色,似乎两者都依赖于 1 和 0 的组合,每个字节有 256 种可能的组合。ASCII 可以将诸如 (01100001) 之类的字母表示为字母“A”。但是可能会有颜色 R(01100001)、G(01100001)、B(01100001) 代表某种随机颜色。考虑到低层次,计算机只是读取这些 1 和 0 的集合,需要发生什么来确保计算机渲染颜色 R(01100001)、G(01100001)、B(01100001) 而不是字母 A 三遍在我的屏幕上?

4

2 回答 2

7

我不完全确定这个问题是否适合 Stack Overflow,但无论如何我都会继续给出一个基本的答案。尽管这实际上是一个非常复杂的问题,因为根据您想要回答的深度,我可以为此编写一整本有关计算机体系结构的书。

所以为了简单起见,我只想告诉你:这都是上下文问题。首先让我们处理文本:

例如,当您打开文本编辑器时,隐含的假设是要在其中显示的数据本质上是文本的。要显示的文本是内存中的一些字节(可能是从磁盘上的一些字节中复制出来的)。从内存的角度来看,这些字节是文本并没有神奇的内部上下文。相反,文本编辑器的源代码包含一些指向这些字节的命令,例如“这些字节代表 300 个文本字符”。然后是一系列复杂的步骤,涉及库代码一直到硬件,硬件根据 ASCII 之类的编码(还有许多其他编码文本的方式)将这些字节映射到字符,在字体中找到这些字符,将该字体写入屏幕等

关键是它不必这些字节解释为文本。它只是因为这就是文本编辑器所做的。您可以假设在图像程序中打开它,并告诉它将相同的 300 个字节解释为 RGB 值的 10x10 数组(或图像)。

至于颜色,同样的逻辑适用。它们只是内存中的字节。但是当在屏幕上绘制东西的代码决定了它想用什么颜色写入什么像素时,它将通过内存映射将这些字节传输到视频卡,然后将它们转换为发送到监视器的命令(仍然以某种二进制格式表示像素和颜色,尽管现实要复杂得多),显示器本身包含固件,然后处理将这些颜色映射到物理像素的细节。代表颜色本身的数字将在某个时候转换为每个 R/G/B 通道的特定电流,以提高或降低其强度。

这就是我现在所有的时间,但这是一个开始。

更新:为了说明我的观点,我从这里获取了 Flatland 的文本。这只是 216624 字节的 ASCII 文本(由您的 Web 浏览器根据上下文解释:.txt 扩展名有帮助,​​但 Web 服务器还提供一个 MIME 类型标头,通知浏览器它应该被解释为纯文本。您的浏览器也可能会分析字节以确定它们的模式确实看起来像纯文本的模式(并且没有大量不代表 ASCII 字符的字节)。我在文本的末尾附加了一些空格,所以它的长度是 217083,即 269 * 269 * 3,然后将其绘制为 269 x 269 RGB 图像:

看起来不是很有趣。但关键是我只是拿了那些完全相同的字节并告诉软件,“好的,现在这些是 RGB 值”。这并不是说将纯文本字节视为图像没有用。例如,它可能是一种可视化加密算法的有用方法。 显示了使用非常不安全的算法加密的图像 - 您仍然可以很好地了解原始未加密文件中的字节模式。如果它是文本而不是图像,这将没有什么不同,因为特定语言(如英语)的文本也具有已知的统计模式。一个好的加密算法看起来会使加密的图像看起来更像随机噪声。

于 2013-02-21T20:35:23.103 回答
1

Zero and one are just zero and one, nothing more. A byte is just a collection of 8 bit. The meaning you assign to information depends on what you need at the moment, what "language" you use to interpret your information. 65 is either letter A in ASCII or number 65 if you're using it in, say, int a = 65 + 3. At low level, different (thousands of) machine instructions are executed to ensure that your data is treated properly, depending for example on the type of file you're reading, its headers, which process requests the data, and so on. The different high-level functions you use to treat different information expand to very different machine code.

于 2013-02-21T20:37:44.273 回答