linux - 二进制数如何表示为字符

标签 linux windows linux-kernel character-encoding operating-system

如您所知,当我们谈论字符序列时,我们有一些编码,例如 ASCII 和 Unicode 以及...我想知道操作系统如何理解 65 应该表示为“A”字符。换句话说,操作系统如何将这种二进制或十六进制数字表示形式转换为图形(字符)表示形式?在 Windows 或 Linux 等操作系统中,这是如何发生的?不幸的是,我没有找到任何有关操作系统这一基本概念的信息。

最佳答案

这取决于字体。最简单的字体只是小图片的编号列表,例如 A

这是 bitmap font in Linux 的示例:

    /* 65 0x41 'A' */
    0x38, /* 00111000 */
    0x6c, /* 01101100 */
    0xc6, /* 11000110 */
    0xfe, /* 11111110 */
    0xc6, /* 11000110 */
    0xc6, /* 11000110 */
    0xc6, /* 11000110 */
    0x00, /* 00000000 */

数字 65 简单地映射到其他 8 个数字,这里以十六进制表示。这些注释有助于以二进制形式显示它们,如果你眯着眼睛,你可以辨认出由 1 绘制的“A”。

当系统想要显示第 65 个字符时,它会查看此表,然后将每个 0 位绘制为黑色,将每个 1 位绘制为白色(对于白底黑字文本,反之亦然)。这使得“A”出现。

是什么阻止你改变图片,让 65 显示为完全不同的角色?没有什么!人们经常这样做,例如瑞典人如何将字母 123 从显示 { 更改为显示 ä,以便他们可以书写自己的语言。

现代字体更加先进,包含笔划、线条和曲线,而不是像这样的小图片,但概念相同。

关于linux - 二进制数如何表示为字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067841/

相关文章:

java - Java 程序末尾不需要的 % 符号

linux - 使用 shell 脚本给终端着色

c++ - 来自 Windows 原始输入的水平鼠标滚轮消息

windows - 将数据从Docker容器持久保存到主机

c++ - 您使用什么工具在 Windows 上分析( native )C++?

linux - 为什么内核需要虚拟寻址?

c - 在 Linux 内核中构建模块需要哪些文件/目录?

linux - Bash 脚本中仅 Grep 变量名

linux - 如何grep两个IP地址并增加最后一个数字的值?

c - u8、uint8_t、__u8 和 __be8 之间的区别