Javascript: преобразовать (шестнадцатеричное) целое число со знаком в значение JavaScript

У меня есть значение со знаком, данное в виде шестнадцатеричного числа, например0xffeb и хочу конвертировать в-21 как "нормальный" Javascript integer.

Я уже написал некоторый код:

function toBinary(a) { //: String
    var r = '';
    var binCounter = 0;
    while (a > 0) {
        r = a%2 + r;
        a = Math.floor(a/2);
    }
    return r;
}

function twoscompl(a) { //: int
    var l = toBinaryFill(a).length;
    var msb = a >>> (l-1);

    if (msb == 0) {
        return a;
    }

    a = a-1;
    var str = toBinary(a);
    var nstr = '';
    for (var i = 0; i < str.length; i++) {
        nstr += str.charAt(i) == '1' ? '0' : '1';
    }
    return (-1)*parseInt(nstr);
}

Проблема в том, что моя функция возвращает 1 как MSB для обоих чисел, потому что только в MSB двоичного представления "строка» выглядит И для этого случая оба числа равны 1:

-21 => 0xffeb => 1111 1111 1110 1011
 21 => 0x15   =>              1 0101

Есть ли у вас идеи сделать это более эффективным и приятным?

Привет, мифбу

Ответы на вопрос(4)

Ваш ответ на вопрос