Javascript 将十进制转换为十六进制不适用于8020224
好的,问题是我用这个函数尝试过的其他代码可以很好地工作,但是由于某种原因,输入这个特定的十进制代码不起作用 然而,首先让我给你当前的代码,我必须反驳这一点Javascript 将十进制转换为十六进制不适用于8020224,javascript,Javascript,好的,问题是我用这个函数尝试过的其他代码可以很好地工作,但是由于某种原因,输入这个特定的十进制代码不起作用 然而,首先让我给你当前的代码,我必须反驳这一点 function hexlify(num) { const bs = num.toString(16); // rearrange because CSS hex str are yolo. return '#' + (bs.substr(4, 2) + bs.substr(2, 2) + bs.substr(0, 2
function hexlify(num) {
const bs = num.toString(16);
// rearrange because CSS hex str are yolo.
return '#' + (bs.substr(4, 2) + bs.substr(2, 2) + bs.substr(0, 2)).padStart(6, '0');
}
这是我的一个朋友给我的一个代码,尽管我没能问他为什么需要重新排列它们,而其他人则不需要。那么,有人能给我解释一下为什么需要重新排列它吗?就像我见过的其他代码一样:
let hexString = yourNumber.toString(16);
if (hexString.length % 2) {
hexString = '0' + hexString;
}
这是我从其他问题中发现的。它是有效的,直到我输入十进制数:8020224
输出给我:
#7A6200
而不是#00627A
所以问题再次是,为什么会发生这种情况。我给出的每一个十进制数都很好,这里只是一个简短的列表
- 65535
- 5329233
- 4802889
您提供的第二段代码在提供
8020224
作为输入时返回7a6100
,这是正确的
您期望的输出
00627A
,对应于十进制值25210
您提供的第二段代码在提供8020224
时返回7a6100
,这是正确的
您所期望的输出
00627A
,对应于十进制值25210
,好的,因此我可以向我的朋友询问这一点,他回答如下:
一些图形API和工具包等,飞行标准可能很喜欢,使用十六进制颜色,字节顺序为:#aabbggrr。这种习俗一直在持续下去。这样,颜色(R:255、G:0、B:127、A:6)将变成:#067f00ff
CSS和Photoshop以及。。。另一方面,使用排序:#aarrggbb(蓝色和红色切换),因此我们必须简单地切换十六进制输出中的这两个字节,以便画布根据需要解析CSS颜色
因此,我认为十进制到十六进制的转换不一定是“不正确的”,它只是不是我正在寻找的十六进制。我想这就解开了这个谜。(至少对我来说)好吧,我可以问我的朋友这件事,他回答说: 一些图形API和工具包等,飞行标准可能很喜欢,使用十六进制颜色,字节顺序为:#aabbggrr。这种习俗一直在持续下去。这样,颜色(R:255、G:0、B:127、A:6)将变成:#067f00ff CSS和Photoshop以及。。。另一方面,使用排序:#aarrggbb(蓝色和红色切换),因此我们必须简单地切换十六进制输出中的这两个字节,以便画布根据需要解析CSS颜色
因此,我认为十进制到十六进制的转换不一定是“不正确的”,它只是不是我正在寻找的十六进制。我想这就解开了这个谜。(至少对我来说)为什么正确答案应该是
00627A
?即25210
base10(即(6*16**3)+(2*16**2)+(7*16)+(10)
),您熟悉吗?hexlify
函数的行为似乎类似于little endianness,输入数字是根据(绿色*65535)+(蓝色*255)+红色
@JonathanLonowski计算得出的,看起来是这样,但我今天得到了答案。显然是格式aaggbbrr
。不确定这是否与您正在谈论的内容相同。如果您使用0x123456
调用它,并检查是否得到#123456
返回,则测试会更容易。为什么正确答案应该是00627A
?即25210
base10(即(6*16**3)+(2*16**2)+(7*16)+(10)
),您熟悉吗?hexlify
函数的行为似乎类似于little endianness,输入数字是根据(绿色*65535)+(蓝色*255)+红色
@JonathanLonowski计算得出的,看起来是这样,但我今天得到了答案。显然是格式aaggbbrr
。不确定这是否与您正在谈论的内容相同。如果您使用0x123456
调用它,并检查是否得到123456
返回,则测试会更容易。