我从一个文件中读取了 4 个字节的二进制字符串。4 字节的二进制字符串是大端,代表一个 32 位整数。但我的机器是小端(英特尔)。所以我需要将大端的4字节二进制字符串转换为32位小端整数。
mysql中是否有任何本机函数可以处理这个问题?一个例子将受到高度赞赏。
谢谢。
更新: 依赖操作系统的函数或 c/c++ 标准库在 mysql 项目中受到高度限制,在这种情况下几乎不能使用。
我从一个文件中读取了 4 个字节的二进制字符串。4 字节的二进制字符串是大端,代表一个 32 位整数。但我的机器是小端(英特尔)。所以我需要将大端的4字节二进制字符串转换为32位小端整数。
mysql中是否有任何本机函数可以处理这个问题?一个例子将受到高度赞赏。
谢谢。
更新: 依赖操作系统的函数或 c/c++ 标准库在 mysql 项目中受到高度限制,在这种情况下几乎不能使用。
对于 C,您可以使用ntohl()
将 32 位(即 4 个字节)整数转换为主机字节顺序。
它的原型应该驻留在<arpa/inet.h>
.
更新
函数族ntoh/hton
由 POSIX 标准定义。
它将网络字节顺序转换为主机字节顺序和verse Visa。
网络字节顺序被定义为 Big Endian。
您可以将 32 位小端原始整数数据从N
列中的偏移量开始s
转换为十进制,如下所示:
conv(hex(reverse(substr(s, N + 1, 4))), 16, 10)
我发现这个页面正在寻找一种更有效的方法来做到这一点,而无需编写 UDF。使用 UDF 是否简单且非常高效 - 您可以手动完成,无需任何库调用,但是,您必须了解 C,并且您必须对服务器有足够的访问权限才能安装 UDF,这将在 Amazon RDS 或 Aurora 之类的东西上是不可能的。