当前位置: 首页 > 面试题库 >

JavaScript RGB到十六进制和十六进制到RGB

夹谷和韵
2023-03-14
问题内容

如何将RGB格式的颜色转换为十六进制格式,反之亦然?

例如,转换'#0080C0'(0, 128, 192)


问题答案:

:这两个版本的rgbToHex期待整数值rg并且b,所以你需要,如果你有非整数值做自己的舍入。

以下将执行RGB到十六进制的转换,并添加任何所需的零填充:

function componentToHex(c) {

  var hex = c.toString(16);

  return hex.length == 1 ? "0" + hex : hex;

}



function rgbToHex(r, g, b) {

  return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);

}



alert(rgbToHex(0, 51, 255)); // #0033ff

转换另一种方式:

function hexToRgb(hex) {

  var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);

  return result ? {

    r: parseInt(result[1], 16),

    g: parseInt(result[2], 16),

    b: parseInt(result[3], 16)

  } : null;

}



alert(hexToRgb("#0033ff").g); // "51";

最后,在答案中rgbToHex()讨论并在@cwolves的评论中建议使用的替代版本:

function rgbToHex(r, g, b) {

  return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);

}



alert(rgbToHex(0, 51, 255)); // #0033ff

更新

这是它的一个版本hexToRgb(),还解析了一个速记的三元组,例如“#03F”:

function hexToRgb(hex) {

  // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")

  var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;

  hex = hex.replace(shorthandRegex, function(m, r, g, b) {

    return r + r + g + g + b + b;

  });



  var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);

  return result ? {

    r: parseInt(result[1], 16),

    g: parseInt(result[2], 16),

    b: parseInt(result[3], 16)

  } : null;

}



alert(hexToRgb("#0033ff").g); // "51";

alert(hexToRgb("#03f").g); // "51";


 类似资料:
  • 两周以来,我一直在努力和阅读来解决这个问题,但我尝试的一切都没有奏效:-( 我正在使用python 2.7。 据我所知,我确实有一个base64字符串,格式如下: 我想把它转换成十六进制字符串。00000000194BD636AEDEAE4C9827C9465288D7F40700BA89A9BA12E1314B81606DB385F3B7B100000074656E0000BA89A9BA12E

  • 问题内容: 如何将十进制转换为以下格式的十六进制(至少两位,零填充,没有0x前缀)? 输入: 输出: 输入: 输出: 我尝试过,但似乎它显示了第一个示例,但没有显示第二个示例。 问题答案: 将该功能与格式一起使用。 该部分要求使用至少2位数字,并使用零将其填充到长度,表示小写的十六进制。 的 格式规范的迷你语言 也给你大写十六进制输出,并且可以前缀字段宽度与以包括或前缀(取决于你阉羊使用或作为格式

  • 问题内容: 我有一个Java文件 我想将 pic.bmp 转换为十六进制值的数组,以便可以编辑并将其保存为修改后的版本。 是否有Java类可以做到这一点? 问题答案: 你真幸运。我几个月前不得不这样做。这是一个精简版,需要从命令行获取两个参数。命令行参数都是文件名…第一个是输入文件,第二个是输出文件。输入文件以二进制形式读取,输出文件以ASCII十六进制形式写入。希望您可以根据自己的需要进行调整。

  • 问题内容: 我有一个代表2的补码的十六进制字符串。是否有一种简单的方法(库/函数)将十六进制转换为十进制而不直接使用其位? EG这是给定左侧十六进制的预期输出: 谢谢! 问题答案: 这似乎在欺骗Java转换数字而不强制给出正结果: 当然,这种情况仅适用于8、16、32和64位2的补码:

  • 问题内容: 我有一个家庭作业,需要在十进制,二进制和十六进制之间进行三向转换。我需要帮助的功能是将十进制转换为十六进制。我几乎不了解十六进制,但是如何将十进制转换为十六进制。我需要一个接受并返回的函数。不幸的是我没有此功能的任何草稿,我完全迷路了。我只有这个。 另外,我不能使用诸如Integer.toHexString()之类的预制函数或任何其他东西,我需要真正地制作算法,否则我什么都不会学。 问

  • 主要内容:二进制,八进制,十六进制我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、十一、二十九、一百等,就需要多个数字组合起来。 例如表示 5+8 的结果,一个数字不够,只能”进位“,用 13 来表示;这时”进一位“相当于十,”进两位“相当于二十。 因为逢十进一(满十进一),也因为只有 0~9 共十个数字,所以叫做 十进制(Decimalism)。十进