【问题标题】:How Binary Numbers Represented as Characters二进制数如何表示为字符
【发布时间】:2019-09-27 18:53:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这取决于字体。最简单的字体只是像 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 个数字,这里以十六进制表示。 cmets 有用地以二进制显示它们,如果你眯着眼睛,你可以辨认出一个由 1 画出的“A”。

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

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

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

    【讨论】:

      【解决方案2】:

      程序员必须指定位置 X 的值是字符、整数、可执行指令等。它不会自动发生。操作系统代码需要跟踪它存储在每个位置的数据类型。

      换句话说,操作系统如何将此二进制或十六进制数字表示转换为图形(字符)表示?

      要将数字转换为字符串,您必须编写或使用库代码来完成。

       String Convert to Hex (BYTE VALUE)
      
       string digits [16] = '0', '1', '2', '3', ..., 'A', 'B', 'C', ... 'F' ;
      
       Result = digits [value >> 4] + digits [value AND FF#16] 
      
       Return Result 
      

      【讨论】:

        猜你喜欢
        • 2019-05-14
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 2020-01-22
        • 2020-08-02
        • 2016-04-30
        • 2020-02-28
        • 1970-01-01
        相关资源
        最近更新 更多