如何在JavaScript中将十进制值转换为其十六进制等效值?
如何在JavaScript中将十进制值转换为其十六进制等效值?
使用以下方法将数字转换为十六进制字符串:
hexString = yourNumber.toString(16);
用以下方法反转该过程:
yourNumber = parseInt(hexString, 16);
yourNumber
是一个变量。如果你想使用一个数字文字,则需要像(45).toString(16)
这样做,但如果您是硬编码一个数字,请自己将其写成十六进制字符串... (45).toString(16)
始终等于'2d'
,所以不要浪费CPU周期来计算它。 - Prestaul42
和42.0
是相同的。但是可以省略零并写成42.
。因此,如果你写42.toString(16)
,句点不会被视为你尝试调用一个函数,而是作为小数点。所以,要实际调用函数,你需要在小数点后面添加额外的句点。 - Thomas Watson如果你需要处理类似于位字段或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));
number = 0x100000000 + number;
- Johannes Matokic>>>
运算符将数字转换为无符号表示,例如 ((-3253) >>> 0).toString(16)
返回 "fffff34b"
。 - csharpfolk以下代码将把十进制值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;
}
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); }
- Loriconst hex = d => Number(d).toString(16).padStart(2, '0')
- Ninh Pham如果要得到一个负数的 补码 的十六进制表示,可以使用 >>>
无符号右移运算符。例如:
> (-1).toString(16)
"-1"
> ((-2)>>>0).toString(16)
"fffffffe"
然而,仍存在一种限制:JavaScript 按位运算符将其操作数视为 32 位序列,也就是说,你会得到 32 位的二进制补码。((-2)>>>0).toString(16).substring(2)
。 - antonyh带有内边距:
function dec2hex(i) {
return (i+0x10000).toString(16).substr(-4).toUpperCase();
}
function numHex(s)
{
var a = s.toString(16);
if ((a.length % 2) > 0) {
a = "0" + a;
}
return a;
}
并且
function strHex(s)
{
var a = "";
for (var i=0; i<s.length; i++) {
a = a + numHex(s.charCodeAt(i));
}
return a;
}
function toHex(s)
{
var re = new RegExp(/^\s*(\+|-)?((\d+(\.\d+)?)|(\.\d+))\s*$/);
if (re.test(s)) {
return '#' + strHex( s.toString());
}
else {
return 'A' + strHex(s);
}
}
/////////////////////////////////////////////////////////////////////////////
// toHex(). Convert an ASCII string to hexadecimal.
/////////////////////////////////////////////////////////////////////////////
toHex(s)
{
var l = "0123456789ABCDEF";
var o = "";
if (typeof s != "string") {
s = s.toString();
}
if (s.substr(0,2).toLowerCase() == "0x") {
return s;
}
for (var i=0; i<s.length; i++) {
var c = s.charCodeAt(i);
o = o + l.substr((c>>4),1) + l.substr((c & 0x0f),1);
}
return "0x" + o;
}
/////////////////////////////////////////////////////////////////////////////
// fromHex(). Convert a hex string to ASCII text.
/////////////////////////////////////////////////////////////////////////////
fromHex(s)
{
var start = 0;
var o = "";
if (typeof s != "string") {
s = s.toString();
}
if (s.substr(0,2).toLowerCase() == "0x") {
start = 2;
}
for (var i=start; i<s.length; i+=2) {
var c = s.substr(i, 2);
o = o + String.fromCharCode(parseInt(c, 16));
}
return o;
}
<?php
echo <<<EOD
<html>
<head><title>Test</title>
<script>
var a = -3.14159265;
alert( "A = " + a );
var b = a.toString();
alert( "B = " + b );
</script>
</head>
<body>
</body>
</html>
EOD;
?>
if( s.substr(0,2)
之前放置if (typeof s != "string")
可能不是你想要的。而且,我返回的结果也不是我预期的(toHex(0x1f635)
会得到"0x313238353635"
)。我还没有进一步调查。 - ruffinsubstr
和 toLowerCase
... 所以要么 typeof
需要更早出现,要么,如果你期望 toHex
在那里对非字符串抛出异常,你应该完全删除 typeof
检查。明白了吗?也就是说,如果我在没有编辑的情况下使用这里的代码,并调用 toHex(0x1f635)
,我会得到 Uncaught TypeError: s.substr is not a function
。如果我将字符串转换提前,你是对的,数字首先转换为十进制,然后事情就会变得复杂起来。当然,这意味着如果 s
不是字符串,你不能在这里进行简单的转换。 - ruffin不使用循环:
function decimalToHex(d) {
var hex = Number(d).toString(16);
hex = "000000".substr(0, 6 - hex.length) + hex;
return hex;
}
// Or "#000000".substr(0, 7 - hex.length) + hex;
// Or whatever
// *Thanks to MSDN
另外,不使用需要评估的循环测试是否更好呢?
例如,不要这样写:
for (var i = 0; i < hex.length; i++){}
< p >有< /p >for (var i = 0, var j = hex.length; i < j; i++){}
将一些好的想法结合起来,用于 RGB 值转换为十六进制函数(在 HTML/CSS 中添加 #
):
function rgb2hex(r,g,b) {
if (g !== undefined)
return Number(0x1000000 + r*0x10000 + g*0x100 + b).toString(16).substring(1);
else
return Number(0x1000000 + r[0]*0x10000 + r[1]*0x100 + r[2]).toString(16).substring(1);
}
限制/填充到一定数量的字符:
function decimalToHex(decimal, chars) {
return (decimal + Math.pow(16, chars)).toString(16).slice(-chars).toUpperCase();
}