Подтвердить что ты не робот

Работа с шестнадцатеричными строками и шестнадцатеричными значениями проще в Javascript

Я беру строки, которые представляют шестнадцатеричные числа (на самом деле, шестнадцатеричные цвета) и добавляя их. Итак, добавив aaaaaa + 010101= ababab. Мой метод кажется излишне длинным и сложным:

var hexValue = "aaaaaa";
hexValue = "0x" + hexValue;
hexValue = parseInt(hexValue , 16);
hexValue = hexValue + 0x010101;
hexValue = hexValue.toString(16);
document.write(hexValue); // outputs 'ababab'

Значение шестнадцатеричного значения остается строкой после конкатенации 0x, поэтому я должен изменить его на число, а затем я могу добавить, тогда я должен изменить его обратно в шестнадцатеричный формат! Есть еще больше шагов, если число, которое я добавляю к нему, также является шестнадцатеричной строкой, или если вы принимаете во внимание, что я удаляю # из шестнадцатеричного цвета, прежде чем все это запустится.

Конечно, есть способ сделать это с меньшими шагами! (И я не имею в виду просто поместить все это на одну строку (parseInt("0x"+"aaaaaa",16)+0x010101).toString(16) или использовать сокращенное обозначение, я имею в виду фактически меньшее количество операций.)

Есть ли способ заставить Javascript прекратить использование десятичных чисел для всех своих математических операций и вместо этого использовать hex? Или есть какой-то другой способ облегчения работы Javascript с Hex?

4b9b3361

Ответ 1

Нет, нельзя указать, чтобы язык JavaScript использовал шестнадцатеричный целочисленный формат вместо десятичного по умолчанию. Ваш код примерно такой же кратким, как и он, но обратите внимание, что вам не нужно добавлять базовый индикатор "0x", когда вы используете "parseInt" с базой.

Вот как я подошел бы к вашей проблеме:

function addHexColor(c1, c2) {
  var hexStr = (parseInt(c1, 16) + parseInt(c2, 16)).toString(16);
  while (hexStr.length < 6) { hexStr = '0' + hexStr; } // Zero pad.
  return hexStr;
}

addHexColor('aaaaaa', '010101'); // => 'ababab'
addHexColor('010101', '010101'); // => '020202'

Ответ 2

Как насчет этого:

var hexValue = "aaaaaa";
hexValue = (parseInt(hexValue, 16) + 0x010101).toString(16);
document.writeln(hexValue); // outputs 'ababab'