Как преобразовать десятичное в шестнадцатеричное в JavaScript - PullRequest
1314 голосов
/ 12 сентября 2008

Как преобразовать десятичные значения в их шестнадцатеричный эквивалент в JavaScript?

Ответы [ 27 ]

9 голосов
/ 27 января 2012

Ограничено / дополняется заданным количеством символов:

function decimalToHex(decimal, chars) {
    return (decimal + Math.pow(16, chars)).toString(16).slice(-chars).toUpperCase();
}
8 голосов
/ 30 мая 2009
function dec2hex(i)
{
  var result = "0000";
  if      (i >= 0    && i <= 15)    { result = "000" + i.toString(16); }
  else if (i >= 16   && i <= 255)   { result = "00"  + i.toString(16); }
  else if (i >= 256  && i <= 4095)  { result = "0"   + i.toString(16); }
  else if (i >= 4096 && i <= 65535) { result =         i.toString(16); }
  return result
}
8 голосов
/ 13 июня 2012

Если вы хотите преобразовать число в шестнадцатеричное представление значения цвета RGBA, я обнаружил, что это наиболее полезная комбинация из нескольких советов:

function toHexString(n) {
    if(n < 0) {
        n = 0xFFFFFFFF + n + 1;
    }
    return "0x" + ("00000000" + n.toString(16).toUpperCase()).substr(-8);
}
6 голосов
/ 28 декабря 2017

Вот урезанная версия ECMAScript 6:

const convert = {
  bin2dec : s => parseInt(s, 2).toString(10),
  bin2hex : s => parseInt(s, 2).toString(16),
  dec2bin : s => parseInt(s, 10).toString(2),
  dec2hex : s => parseInt(s, 10).toString(16),
  hex2bin : s => parseInt(s, 16).toString(2),
  hex2dec : s => parseInt(s, 16).toString(10)
};

convert.bin2dec('111'); // '7'
convert.dec2hex('42');  // '2a'
convert.hex2bin('f8');  // '11111000'
convert.dec2bin('22');  // '10110'
6 голосов
/ 10 ноября 2015

Для всех, кто интересуется, вот JSFiddle, сравнивающий большинство ответов на этот вопрос .

И вот метод, которым я закончил:

function decToHex(dec) {
    return (dec + Math.pow(16, 6)).toString(16).substr(-6);
}

Кроме того, имейте в виду, что если вы хотите преобразовать десятичное число в шестнадцатеричное для использования в CSS в качестве цветного типа данных , вы можете вместо этого извлечь значения RGB из десятичного числа и использовать RGB () .

Например ( JSFiddle ):

var c = 4210330; // your color in decimal format
var rgb = [(c & 0xff0000) >> 16,  (c & 0x00ff00) >> 8,  (c & 0x0000ff)];

// assuming you're using jQuery...
$("#some-element").css("color", "rgb(" + rgb + ")");

Устанавливает свойство #some-element CSS color в rgb(64, 62, 154).

6 голосов
/ 19 сентября 2009

AFAIK комментарий 57807 неверен и должен выглядеть примерно так: var hex = Number (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;
}
5 голосов
/ 09 мая 2016

Вы можете проверить следующий пример JsFiddle или пример кода Stack Overflow JavaScript.

'use strict';

var convertBase = function () {

    function convertBase(baseFrom, baseTo) {
        return function (num) {
            return parseInt(num, baseFrom).toString(baseTo);

        };
    }

    // Decimal to hexadecimal
    convertBase.dec2hex = convertBase(10, 16);
    return convertBase;
}();

alert(convertBase.dec2hex('42')); // '2a'
5 голосов
/ 21 октября 2012

А если число отрицательное?

Вот моя версия.

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);
}
4 голосов
/ 07 февраля 2016

Как преобразовать десятичное число в шестнадцатеричное в 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
4 голосов
/ 10 июня 2013

Как говорится в принятом ответе, самый простой способ преобразования десятичного числа в шестнадцатеричный - это var hex = dec.toString(16). Однако вы можете предпочесть добавить преобразование строк, так как оно обеспечивает правильную работу строковых представлений, таких как "12".toString(16).

// Avoids a hard-to-track-down bug by returning `c` instead of `12`
(+"12").toString(16);

Для обратного процесса вы также можете использовать приведенное ниже решение, так как оно еще короче.

var dec = +("0x" + hex);

Кажется, это медленнее в Google Chrome и Firefox, но значительно быстрее в Opera. Смотри http://jsperf.com/hex-to-dec.

...