gpt4 book ai didi

hex - 为什么十六进制数的前缀是 # 而不是 0x?

转载 作者:行者123 更新时间:2023-12-04 10:14:26 26 4
gpt4 key购买 nike

由于任何 RGB 值只是一个 24 位整数,因此将颜色表示为单个十六进制数是完全合理的。既然商定的十六进制数字前缀是 0x,为什么我们要为颜色引入一个前缀 (#)?

最佳答案

据我所知,十六进制表示法源自 X11(X 窗口系统),其历史可追溯到 1987 年,甚至早于 Linux 和 WWW。

这是 Xlib 手册中的相关页面:

enter image description here


最终选择它的原因可能是因为基于 Unix 的系统是当时学术界的首选操作系统,他们熟悉这种表示法,并考虑使用已经支持的东西而不是重新发明轮子。

当第一个网络浏览器问世时,它只是纯文本。一些浏览器为您提供了设置背景和文本颜色的选项,但它不是网页的一部分。但有些人想要背景颜色:

"Mosaic has the capability to change the background color of a page in the prefs. I asked NCSA if it was possible for their program to read a "page color" tag, and then set the page color appropriately. They told me that would take a change in HTML specs and only then will they support it."
Bradford Bohonus (Sep 22 1994)

当然,HTML 背后的整个想法是将结构和表示分离,所以这不会发生。在 HTML 2.0(1995 年)发布之前,样式表的想法很快就出现了。

有很多关于样式表的提议,一个早期的提议确实使用了 0x 十六进制表示法:

Rob Raisch (raisch@ora.com)
Thu, 10 Jun 1993 15:23:20 -0400
...
(fo) foreground= COLOR DEFAULT:''
Describes the recommended foreground color representation
for a character. Colors are specified as 'inherit', text
names, (eg. black, white, magenta), or as RGB color
values in hexidecimal, (eg. 0x000000, 0xffffff, 0xff00ff)

(ba) background= COLOR DEFAULT:''
Describes the recommended background color representation
for a character. Colors are specified as 'inherit', text
names, (eg. black, white, magenta), or as RGB color
values in hexidecimal, (eg. 0x000000, 0xffffff, 0xff00ff)
...

另一个名为“HTML 样式表”的提案(Joe English,1994 年)建议如下:

All the colors used by a style sheet must be declared in the (optional) COLORS element. This element contains one or more COLOR elements, each of which specifies a single color.

COLOR elements have two required attributes: ID, a unique identifier, and RGB, which defines the color. Colors are referenced by ID.

Colors are defined by their red, green, and blue components using the X11 hex notation: a pound sign followed by 3, 6, 9 or 12 hexadecimal digits. The digits are interpreted as three groups of 1, 2, 3 or 4 half-bytes, the first specifying the red component, the second green, and the third blue. Hex digits A through F may be upper or lower case.

<colors>
<color id=red rgb="#F00">
<color id=green rgb="#00FF00">
<color id=blue rgb="#000000000FFFFF">
<color id=grey rgb="#c0c0c0">
<color id=white rgb="#FFFFFF">
</colors>

虽然没有直接归因于 Joe English,但最终 #RGB 和 #RRGGBB 十六进制符号最终出现在 CSS1 草稿和最终推荐中,您可以在这里看到:https://www.w3.org/Style/CSS/history.html .

我个人认为,这可能与词法分析有关,该词法分析用于解析具有特定规则的文本(#RGB vs #RRGGBB),而不是像 C/C++ 源代码中那样表示原始数据。在CSS规范草案中,它定义了解析“hexcolor”所需的规则:

h               [0-9a-fA-F]
hexcolor #{h}{h}{h}|#{h}{h}{h}{h}{h}{h}|#{h}{h}{h}{h}{h}{h}{h}{h}{h}

所以基本上他们想要一个表示颜色代码的文本定义,而现有的 X11 规范符合要求。由于 0xCAFE$CAFECAFEh 等十六进制符号用于表示无法描述的原始数据,因此可能会导致困惑,从而对这些数据施加更严格的规则那些已经存在的符号。

关于hex - 为什么十六进制数的前缀是 # 而不是 0x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61143371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com