在 JavaScript 中将整数转换为十六进制字符串

Posted

技术标签:

【中文标题】在 JavaScript 中将整数转换为十六进制字符串【英文标题】:Converting integers to hex string in JavaScript 【发布时间】:2011-06-12 07:58:45 【问题描述】:

如何将红色、绿色和蓝色的整数字节值转换为十六进制字符串,然后将其分配给上下文以呈现到 html5 画布上?

例如转换青色,

var r = 0;
var g = 255;
var b = 255;

用于分配给上下文填充颜色的十六进制字符串。

this.context.fillStyle = '#00FFFF';

或者有没有更好的方法来完全做到这一点?

【问题讨论】:

【参考方案1】:

要将数字转换为十六进制,您可以使用内置的 toString(16) 函数。 简单代码:

function convert(integer) 
    var str = Number(integer).toString(16);
    return str.length == 1 ? "0" + str : str;
;

function to_rgb(r, g, b)  return "#" + convert(r) + convert(g) + convert(b); 

var color = to_rgb(r, g, b);

【讨论】:

【参考方案2】:

只需使用 RGB 值,例如:

this.context.fillStyle = "rgb(0,255,255)";

【讨论】:

最好的答案总是最简单的! 但是感谢所有回复的人,他们的回答很有趣,对我的知识和理解很有价值。每个 +1。 @ElRonnoco 根据one person's post,它适用于 NN7+、IE5+、Mozilla 1.0+。所以是的,非常跨浏览器兼容。 (cannot be said 与 rgba(...) 相同。) 喂。这不是回答所提出的问题。下面的答案 Number(integer).toString(16) 是正确的,应该被接受。 @DavidFischer 回答我认为的问题的第二部分【参考方案3】:

我认为,最简单的方法是:

变量 g = 255; g.toString(16); //给出“ff”

使用赋予语言的功能。

【讨论】:

此答案缺少十六进制颜色值所需的 0 填充。 '0x' + g.toString(16),加个前缀很简单 您可以为此使用padStartg.toString(16).padStart(2, '0')【参考方案4】:

将一个整数转换为十六进制字节,如:

const g = 255;

gPadded = Number(g).toString(16).padStart(2, "0");

使用数组会更好:

const r = 0;
const g = 255;
const b = 255;
const color = [r, g, b];

this.context.fillStyle = "#" + color.map(i=>i.toString(16).padStart(2, "0")).join("");

【讨论】:

【参考方案5】:
function pad(number, length) 
    var str = '' + number;
    while (str.length < length) str = '0' + str;
    return str;


function toRGBHex(r,g,b)  
    return pad(r.toString(16),2) + pad(g.toString(16),2) + pad(b.toString(16),2); 

【讨论】:

【参考方案6】:

要将您的个人 RGB 值转换为十六进制颜色,您可以使用此函数,尽管改用 "rgb("+r+","+g+","+b+")" 更有意义。

function rgbToHex(r,g,b) 
    return "#"+("00000"+(r<<16|g<<8|b).toString(16)).slice(-6);

【讨论】:

~ 仅供参考,尽管已被拒绝,但我已将您的编辑合并到我的答案中。 ***.com/questions/17945972/…(这里没有发送消息的好方法) @MightyPork 哦,好的,谢谢你告诉我。是的,应该有办法在这里收件箱的人。哦,好吧。【参考方案7】:

您可以使用.toString(16)

let decimalNumber = 255;
decimalNumber.toString(16)
// Expected output is "FF"

或者如果你想转换二进制基数

let decimalNumber = 24;
decimalNumber.toString(2)
// Expected output is "1010"

source MDN .toString(16)

【讨论】:

【参考方案8】:

您可以为这种转换编写自己的方法 -

// function to generate the hex code
function getHex(dec)

    var hexArray = new Array( "0", "1", "2", "3", 
                              "4", "5", "6", "7",
                              "8", "9", "A", "B", 
                              "C", "D", "E", "F" );

    var code1 = Math.floor(dec / 16);
    var code2 = dec - code1 * 16;

    var decToHex = hexArray[code2];

    return (decToHex);
 

原始来源 - http://programming.top54u.com/post/javascript-Convert-Decimal-to-Hex.aspx

【讨论】:

这只会转换一个半字节。 @El Ronnoco - 请检查链接。当十进制数大于 15 时,我们运行一个循环来调用这个函数。 @Tomas - 这取决于你想如何使用它。我想我已经给出了一个已经存在的代码的链接,它可以供您定制。你不觉得这里的downvote有点苛刻吗? 链接好像坏了。 链接似乎坏了,我不知道为什么这应该被否决?!这是一个有效的函数。

以上是关于在 JavaScript 中将整数转换为十六进制字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在JavaScript中将数字的二进制表示从字符串转换为整数?

在 Groovy 中将整数转换为十六进制字符串

在 C++ 中将十六进制转换为整数的最快方法是啥?

在 Python 中将整数转换为 2 字节的十六进制值

如何在 Android 中将颜色整数转换为十六进制字符串?

在 Ruby 中将整数转换为十六进制字符串