Почему функция подсчета байтов зависает при использовании более 4 байт?

Функция size возвращает количество байт, в которых хранится значение числовой переменной disp. Если значение disp помещается в 4 байтах, функция успешно выполняется. Однако, если значение занимает больше, чем 4 байта, функция почему-то зависает.

get size() {
  let bytes = 0;
  for (let t_disp = this.#disp; t_disp !== 0; bytes++) {
    t_disp >>= 0x08;
  }
  return bytes;
}

Почему функция подсчета байтов зависает при использовании более 4 байт? И как эту проблему решить?


Ответы (1 шт):

Автор решения: iEPCBM

Количество байт, занимаемое числом, можно получить, преобразовав число в строку в шестнадцатеричным представлением. Тогда каждые 2 символа строки будут представлять 1 байт этого числа.

Math.ceil(this.#disp.toString(16).length/2);

Но в таком случае нулевое значение будет восприниматься как 1 байт. Чтобы такого избежать, можно добавить условие:

if (this.#disp !== 0) {
  return Math.ceil(this.#disp.toString(16).length/2);
}
return 0;
→ Ссылка