将小端二进制转换为双字节

问题描述 投票:0回答:3

我正在尝试对我的数据如何存储在 MySQL/MariaDB 中进行简单的证明。本质上它是一个小尾数的二进制字符串,代表我在软件中记录的数值。

然而,我正在努力使用 SELECT 情况,在选择中执行转换以返回正确的结果。使用我当前尝试使用 CAST 和 CONVERT 的方法,它通常会为我提供大量数字。

到目前为止我所拥有的是:

SELECT HEX(BINARY(SubString(Data,0,8))) As Data from prop_binary;

这会正确返回二进制十六进制表示,例如:

000000000000F03F

这应该对应于小端格式的 1。我希望能够完全在 MySQL 中实现这一点,因为我计划在存储过程中使用它。

mysql select binary double type-conversion
3个回答
0
投票

没关系,Ed,我通过在论坛中实现 Convert_Hex_2_Double 函数来修复它http://www.dbforums.com/showthread.php?1703348-MySQL-convert-hex-to-double。然后我实现了 Reverse,得到了正确的值。

最终我得到了:

Select Convert_Hex_2_Double(HEX(Reverse(Binary(Substring(Data,17,8)))) As Data from prop_binary;

这会返回正确的数据集,并向我证明我可以在 MySQL 中实现此目的,因此可以继续使用存储过程。

注意:由于这是 MariaDB,虽然可以创建该函数,但需要修改以删除函数名称及其括号之间的空格,这是我几小时前才了解到的:

http://3.droppdf.com/files/n4agH/learning-mysql-and-mariadb.pdf


0
投票

这可能是最简单的解决方案:

REVERSE(HEX(REVERSE(UNHEX('000000000000F03F'))))
  1. 将十六进制转换为二进制
  2. 反转字符串
  3. 将其转换回十六进制
  4. 再次反转

0
投票

MySQL 5.7 有解决方案吗?转换后得到的是 61503,而不是 1。

© www.soinside.com 2019 - 2024. All rights reserved.