Я пытаюсь преобразовать цвета RGB в формат ASE, и я почти закончил, но последняя часть не работает должным образом. Проблема в том, что преобразование каждого цвета rgb в числа с плавающей запятой неточно, и я понятия не имею, конвертирую ли я просто неправильно или что-то упускаю.
ПРИМЕР: 0,1 до HEX должно быть ~ 0x3dcccccd , но моя программа возвращает 0x3de66666
for (let j = 0; j < 3; j++){
// 0.1 is there just for testing purposes, otherwise there should be % of one rgb color
let binary = (0.1).toString(2).slice(2);
// finding exponent
let idx = -1;
for (let i = 0; i < binary.length; i++){
if (binary[i] === '1') break;
else idx--;
}
// moving binary string, so '1' is at start
binary = binary.slice(Math.abs(idx+1), 23 + Math.abs(idx+1));
// getting bias and converting it into binary
let bias = (127+idx).toString(2);
// there is the final hex format
let s = (parseInt(bias + binary , 2)).toString(16);
// adding color to the final ase file
let color8Byte = swapEndian(parseInt(s, 16));
tempArr[tempArr.length+(j-4)] = color8Byte;
}
FIX: Я случайно добавил еще один 1 в мантису в строке 14.
binary = binary.slice(Math.abs(idx), 23 + Math.abs(idx));