Как обойти каждое возможное шестнадцатеричное число (00 — FF)

#javascript #hex

#javascript #шестнадцатеричное

Вопрос:

Если бы я хотел выполнить цикл вокруг чисел 1-10, я бы создал цикл для увеличения i до тех пор, пока оно меньше или равно 10.

Как это делается, когда вы хотите выполнить цикл вокруг шестнадцатеричного числа? Например, если кто-то вводит почти весь MAC-адрес, 12:34:56:78:90: XX, как бы я показал все возможности того, каким X может быть, от 00 до FF?

Я пытался присваивать значения, такие как array = { "0", "1" .... "F"} , а затем менять i на одно из них каждый раз, когда я зацикливаюсь, но это просто кажется крайне неэффективным.

Есть ли стандартный способ сделать это?

Комментарии:

1. Выполните цикл от 0 до 255 и преобразуйте в шестнадцатеричный. toString(16)

Ответ №1:

Вы можете использовать .toString(16) для получения любого числа в шестнадцатеричном формате.

 const result = []

for (let i = 0; i <= 0xFF;   i)
  result.push(i.toString(16))

console.log(result)  

Затем вы можете захотеть обнулить первые несколько с помощью padStart .

 const result = []

for (let i = 0; i <= 0xFF;   i)
  result.push(i.toString(16).padStart(2, '0'))

console.log(result)  

Обратите внимание, padStart не поддерживается в IE.

Ответ №2:

Вы можете использовать шестнадцатеричные числа в JavaScript, добавляя к ним префикс 0x

 console.log(0xF)  

Они будут преобразованы в десятичные, но может быть проще использовать это обозначение, например, если вы хотите выполнить цикл до 0xFF .

Вы также можете преобразовать число в другие числовые базы при вызове .toString метода и указании основания

 let num = 12;
let otherNum = 255;

console.log(num.toString(16));
console.log(otherNum.toString(16));  

Вы можете объединить два, чтобы сгенерировать все возможные значения:

 const allValues = [];
for(let i = 0; i <= 0xFF; i  ) {
  let num = i.toString(16).toUpperCase();
  
  allValues.push(num);
}

console.log(allValues);