MySQL konvertiert hex zu double

Welcher Ansatz sollte in MySQL gewählt werden, um von HEX (8 Bytes) in einen doppelten Wert zu konvertieren?

Zum Konvertieren von HEX nach INT verwende ich CONV (hex_value, 16,10). Aber um das zu verdoppeln, habe ich keine Ahnung.

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//

Das oben genannte scheint die meiste Zeit zu funktionieren. Was könnt ihr dazu sagen? Ein Problem, mit dem ich konfrontiert bin, ist SQL-Fehler (1690): DOUBLE-Wert liegt außerhalb des Bereichs in pow (2, expoent @ 7), was sich meiner Meinung nach auf die Zeile @ beziehSET result = POWER(2, expoent) * mantissa;

Antworten auf die Frage(0)

Ihre Antwort auf die Frage