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


当前回答

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

函数decimalToHexString(数字){如果(数字<0){number=0xFFFFFFFF+number+1;}return number.toString(16).toUpperCase();}console.log(decimalToHexString(27));console.log(decimalToHexString(48.6));

其他回答

AFAIK评论57807是错误的,应该是这样的:var hex=数字(d).toString(16);而不是var hex=parseInt(d,16);

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;
}

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

我没能找到一个非常干净/简单的十进制到十六进制的转换,它不涉及一堆函数和数组。。。所以我必须自己做这个。

function DecToHex(decimal) { // Data (decimal)

    length = -1;    // Base string length
    string = '';    // Source 'string'

    characters = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ]; // character array

    do { // Grab each nibble in reverse order because JavaScript has no unsigned left shift

        string += characters[decimal & 0xF];   // Mask byte, get that character
        ++length;                              // Increment to length of string

    } while (decimal >>>= 4); // For next character shift right 4 bits, or break on 0

    decimal += 'x'; // Convert that 0 into a hex prefix string -> '0x'

    do
        decimal += string[length];
    while (length--); // Flip string forwards, with the prefixed '0x'

    return (decimal); // return (hexadecimal);
}

/* Original: */

D = 3678;    // Data (decimal)
C = 0xF;    // Check
A = D;        // Accumulate
B = -1;        // Base string length
S = '';        // Source 'string'
H = '0x';    // Destination 'string'

do {
    ++B;
    A& = C;

    switch(A) {
        case 0xA: A='A'
        break;

        case 0xB: A='B'
        break;

        case 0xC: A='C'
        break;

        case 0xD: A='D'
        break;

        case 0xE: A='E'
        break;

        case 0xF: A='F'
        break;

        A = (A);
    }
    S += A;

    D >>>= 0x04;
    A = D;
} while(D)

do
    H += S[B];
while (B--)

S = B = A = C = D; // Zero out variables
alert(H);    // H: holds hexadecimal equivalent

如果要转换大整数,即大于Number.MAX_SAFE_INTEGER--9007199254740991的数字,则可以使用以下代码

const-hugeNumber=“9007199254740991873839”//确保其在字符串中const hexOfHugeNumber=BigInt(hugeNumber).toString(16);console.log(hexOfHugeNumber)

我还没有找到一个明确的答案,如果不检查它是负数还是正数,那就是使用二的补码(包括负数)。为此,我展示了一个字节的解决方案:

((0xFF + number +1) & 0x0FF).toString(16);

您可以将此指令用于任意数量的字节,只需在相应的位置添加FF。例如,设置为两个字节:

((0xFFFF + number +1) & 0x0FFFF).toString(16);

如果要将数组整数强制转换为十六进制字符串:

s = "";
for(var i = 0; i < arrayNumber.length; ++i) {
    s += ((0xFF + arrayNumber[i] +1) & 0x0FF).toString(16);
}

如果数字是负数?

这是我的版本。

function hexdec (hex_string) {
    hex_string=((hex_string.charAt(1)!='X' && hex_string.charAt(1)!='x')?hex_string='0X'+hex_string : hex_string);
    hex_string=(hex_string.charAt(2)<8 ? hex_string =hex_string-0x00000000 : hex_string=hex_string-0xFFFFFFFF-1);
    return parseInt(hex_string, 10);
}