MySQL конвертировать гекс в двойной
Какой подход следует использовать в MySQL для преобразования из HEX (8 байт) в двойное значение?
Для преобразования из HEX в INT я использую CONV (hex_value, 16,10). Но для того, чтобы преобразовать в двойной, я понятия не имею.
CREATE FUNCTION HEX2DOUBLE(hex_input TEXT) RETURNS DOUBLE
DETERMINISTIC
BEGIN
DECLARE hex_bits VARCHAR(64);
DECLARE sign_bit VARCHAR(1);
DECLARE expoent_bits VARCHAR(11);
DECLARE mantissa_bits VARCHAR(52);
DECLARE i INT;
DECLARE mantissa DOUBLE;
DECLARE expoent INT;
DECLARE result DOUBLE;
SET hex_bits = LPAD(CONV(hex_input, 16, 2), 64, '0');
SET sign_bit = SUBSTR(hex_bits, 1, 1);
SET expoent_bits = SUBSTR(hex_bits, 2, 11);
SET mantissa_bits = SUBSTR(hex_bits, 13, 52);
SET expoent = CONV(expoent_bits, 2, 10)-1023;
SET i = 1;
SET mantissa = 0;
WHILE(i <= 52) DO
IF SUBSTR(mantissa_bits, i , 1 ) = '1' THEN
SET mantissa = mantissa + 1/POWER(2, i);
END IF;
SET i = i + 1;
END WHILE;
IF(expoent > -1023) THEN
SET mantissa = mantissa + 1;
END IF;
SET result = POWER(2, expoent) * mantissa;
IF(sign_bit = 1) THEN
SET result = -1 * result;
END IF;
RETURN result;
END//
Выше, кажется, работает большую часть времени. Что вы, ребята, могли бы сказать по этому поводу? Одна проблема, с которой я сталкиваюсь, это ошибка SQL (1690): значение DOUBLE вне диапазона в pow (2, expoent @ 7), которое, я думаю, относится к строкеSET result = POWER(2, expoent) * mantissa;