在将十六进制字符串转换为浮点数时,我遇到了一些挑战。
下面是一个示例:
十六进制:3F62 0C3C
二进制:00111111011000100000110000111100
转换结果(浮点型高字节顺序):0.8829992
这种转换可以通过MySql函数实现吗?如果可能的话,如何实现?
谢谢你的帮助。
发布于 2021-05-23 06:43:50
因此,我假设您的十六进制字符串是某种TEXT类型:
SELECT @hexstring := '3F62 0C3C'您需要做的第一件事是将其转换为小数。您可以使用CONV函数来完成此操作。为此,首先使用REPLACE函数从字符串中删除空格。根据CONV函数的参数,例如,您可以获得二进制或十进制表示:
SELECT @binvalue := CONV(REPLACE(@hexstring, ' ', ''), 16, 2) -- 111111011000100000110000111100
SELECT @decvalue := CONV(REPLACE(@hexstring, ' ', ''), 16, 10) -- 1063390268根据小数表示法,您可以计算浮点数(基于this SO answer):
SELECT SIGN(@decvalue) * (1.0 + (@decvalue & 0x007FFFFF) * POWER(2.0, -23))
* POWER(2.0, (@decvalue & 0x7f800000) / 0x00800000 - 127)结果:
0.8829991817474365或者全部放在一起:
SELECT SIGN(CONV(REPLACE(@hexstring, ' ', ''), 16, 10))
* (1.0 + (CONV(REPLACE(@hexstring, ' ', ''), 16, 10) & 0x007FFFFF)
* POWER(2.0, -23))
* POWER(2.0, (CONV(REPLACE(@hexstring, ' ', ''), 16, 10) & 0x7f800000) / 0x00800000 - 127)在this db<>fiddle中一起测试所有这些功能。
https://stackoverflow.com/questions/67653555
复制相似问题