如何在 JavaScript 中将十进制转换为十六进制

IT技术 javascript hex number-formatting base
2021-01-28 08:14:03

在 JavaScript 中,如何将十进制值转换为等效的十六进制值?

6个回答

使用以下命令将数字转换为十六进制字符串:

hexString = yourNumber.toString(16);

并通过以下方式逆转该过程:

yourNumber = parseInt(hexString, 16);
@Prestaul“不要浪费 CPU 周期来解决这个问题”——这就是所谓的过早优化。除非 JavaScript 在 286 上运行,否则我怀疑开销很重要。此外,“45”可能是程序员需要能够识别的神奇数字(例如以秒为单位的超时持续时间),而“2d”,那么谁会识别呢?
2021-03-16 08:14:03
在这种情况下, yourNum 是一个十六进制字符串。例如 (255).toString(16) == 'ff' && parseInt('ff', 16) == 255
2021-03-28 08:14:03
@Derek,我有一个心理问题,不允许我容忍不必要的括号......@everyone-else,yourNumber是一个变量。如果你想使用数字文字,那么你必须做类似的事情(45).toString(16),但是如果你对一个数字进行硬编码,那么请自己把它写成一个十六进制字符串...... (45).toString(16)永远等于'2d',所以不要浪费 CPU循环来解决这个问题。
2021-04-04 08:14:03
@CiprianTomoiaga 在 JavaScript 中,所有数字都是浮点数。所以42是一样的42.0但是省略零并写入42.. 因此,如果您编写42.toString(16),则不会将句点视为您尝试调用函数,而是将其视为小数点。所以要实际调用一个函数,你必须在小数点后添加一个额外的句点
2021-04-07 08:14:03
如果你不喜欢括号,你可以使用一个额外的点: 42..toString(16)
2021-04-09 08:14:03

如果您需要处理位域或 32 位颜色之类的东西,那么您需要处理有符号数。JavaScript 函数toString(16)将返回一个负的十六进制数,这通常不是您想要的。这个函数做了一些疯狂的加法,使它成为一个正数。

function decimalToHexString(number)
{
  if (number < 0)
  {
    number = 0xFFFFFFFF + number + 1;
  }

  return number.toString(16).toUpperCase();
}

console.log(decimalToHexString(27));
console.log(decimalToHexString(48.6));

+1 对于有用的添加,但如果您将数字转换为不同的表示法,则所有数字“通常”已经是正数,否则您想要负数结果。
2021-03-14 08:14:03
关于我之前评论的简短说明:虽然十六进制表示应该适用于最大 Number.MAX_SAFE_INTEGER 的数字,但这不适用于按位运算(通常用于创建 32 位颜色)。按位运算的结果总是一个有符号的 32 位整数。因此按位结果 >= 2^31 是负数和 0x100000000 | 0 === 0。
2021-03-15 08:14:03
这种转换通常不需要,因为 JavaScript 可以将所有 32 位位字段表示为无符号数(请参阅 Number.MAX_SAFE_INTEGER)。出于同样的原因,到 unsigned 的转换可以写为:number = 0x100000000 + number;
2021-03-28 08:14:03
您可以使用>>>运算符将数字转换为无符号表示,例如((-3253) >>> 0).toString(16)返回"fffff34b"
2021-04-06 08:14:03

下面的代码将十进制值 d 转换为十六进制。它还允许您向十六进制结果添加填充。所以默认情况下 0 将变为 00。

function decimalToHex(d, padding) {
    var hex = Number(d).toString(16);
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex;
}
我正在从数组('255,0,55' 等)中“拉出”数字,而 .toString(16) 不起作用。我得到的都是相同的数字!我在前面添加了“数字”功能,现在可以使用了!只花了大约四个小时试图找到解决方案!!
2021-03-15 08:14:03
这将无法正确处理负值。decimalToHex(-6, 4) 将返回 00-6。
2021-03-31 08:14:03
它也有浮点数的问题,但放入 Math.round() 解决了这个问题。(+1 次)
2021-04-06 08:14:03
function toHex(d) {
    return  ("0"+(Number(d).toString(16))).slice(-2).toUpperCase()
}
function hexRep(number, width) { return (number+Math.pow(16, precision)).toString(16).slice(-width); }
2021-03-19 08:14:03
ES6 const hex = d => Number(d).toString(16).padStart(2, '0')😁
2021-03-31 08:14:03
扩展它并不难,你在那里用 .slice(-number) 切掉最后一位数字。如果你在前面添加更多的零,它会正常工作。
2021-04-03 08:14:03

为完整起见,如果您想要负数二进制补码十六进制表示,您可以使用零填充右移>>>运算符例如:

> (-1).toString(16)
"-1"

> ((-2)>>>0).toString(16)
"fffffffe"

但是有一个限制:JavaScript 按位运算符将其操作数视为 32 位序列,也就是说,您会得到 32 位二进制补码。

这非常有帮助,谢谢!我将它用于 RGB 颜色,因此要获得 24 位变体,切掉前两个字符(额外的 FF)-((-2)>>>0).toString(16).substring(2)
2021-03-14 08:14:03
深入研究所有问题,因为C# number to hexadecimal产生了不同的结果Javascript number to hexadecimal看起来 Javascript 有负数问题。这个答案似乎是解决问题的方法。
2021-03-27 08:14:03
这是迄今为止对这个问题最有value的答案:)
2021-04-04 08:14:03