1

我从一个文件中读取了 4 个字节的二进制字符串。4 字节的二进制字符串是大端,代表一个 32 位整数。但我的机器是小端(英特尔)。所以我需要将大端的4字节二进制字符串转换为32位小端整数。

mysql中是否有任何本机函数可以处理这个问题?一个例子将受到高度赞赏。

谢谢。

更新: 依赖操作系统的函数或 c/c++ 标准库在 mysql 项目中受到高度限制,在这种情况下几乎不能使用。

4

2 回答 2

1

对于 C,您可以使用ntohl()将 32 位(即 4 个字节)整数转换为主机字节顺序。

它的原型应该驻留在<arpa/inet.h>.

更新

函数族ntoh/hton由 POSIX 标准定义。

它将网络字节顺序转换为主机字节顺序和verse Visa。

网络字节顺序被定义为 Big Endian。

于 2013-08-15T06:25:33.840 回答
0

您可以将 32 位小端原始整数数据从N列中的偏移量开始s转换为十进制,如下所示:

conv(hex(reverse(substr(s, N + 1, 4))), 16, 10)

我发现这个页面正在寻找一种更有效的方法来做到这一点,而无需编写 UDF。使用 UDF 是否简单且非常高效 - 您可以手动完成,无需任何库调用,但是,您必须了解 C,并且您必须对服务器有足够的访问权限才能安装 UDF,这将在 Amazon RDS 或 Aurora 之类的东西上是不可能的。

于 2020-04-30T20:22:41.883 回答