Почему функция подсчета байтов зависает при использовании более 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 шт):
Количество байт, занимаемое числом, можно получить, преобразовав число в строку в шестнадцатеричным представлением. Тогда каждые 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;