数据在计算机中是如何解释的

how data is interpreted in computers

当我想到一个让我烦恼的事情是计算机如何解释传入的数据。我搜索了很多但找不到答案所以作为最后的手段我在这里问。我的意思是,您将 USB 插入计算机,数据流就会开始。您的计算机从 USB 接收 1 和 0 并正确解释它们,例如 USB 内部有不同名称、不同格式和分辨率的图片。我不明白的是计算机如何正确地将它们放在一起并出现大图。这可能被视为一个愚蠢的问题,但让我思考了一会儿。这个系统是如何工作的?

我不是计算机科学家,但我正在学习电气和电子工程并且知道一些东西。

它只是 1 和 0 的流,它们被计入字节。正如您可能知道的那样,可以对它们进行多路复用,但是对于现代硬件来说这并不是很有必要(USB 中的 's' 代表“串行”)

"A" 的纯黑白图像将是一个二维数组:

111
101
111
101
101

3x5 font

我猜 "A" 以 111101111101101 的形式存储在字体文件中,已知长度为 3*5=15 位。

当在window中显示时,A会被分解成行,插入到window的相应行中,成为一个可能包含320x256像素的流。

当数据长度不固定时,可以:

  • 如果有最大大小,可以是最大大小的大小(整数和其他原始数据类型这样做,0 需要 32/64 位,400123 也是如此)
  • 长度包含在某处,通常是一种"header"
  • 它被分成常量或可变大小的块,并有一个连续位(UTF-8 是常量块的一个很好的简单示例,一些网络协议(可能 TCP/IP)是一个很好的示例可变块)

双方都需要知道如何解码数据,在你的例子中是一个带有图像的 USB 记忆棒。操作系统有一个驱动程序理解 UUID 是一个存储设备,并尝试读取 special sectors from it. If it detects a partition type it recognizes (for windows that would be NTFS or FAT32), it will then load the file tables, using drivers that understand how to decode those. It finds a filename allows access via the filename. Then an image reading program is able to load the bytestream of that file and decode it using its headers 并将编解码器安装到光栅图像数组中。如果这些部分中的任何一个在您的系统中不可用,您将无法查看图像,并且它对您来说只是任何随机二进制文件(如果您使用 Linux 格式化 USB 记忆棒,或使用 uncommon/old图片格式)

因此,当您到达更高级别时,所有不同级别的显式或隐式握手就数据是什么达成一致(更高级别至少在您同意 endianness 和数据传输波特率之后)