使用mysql本机函数进行字节顺序转换

时间:2013-08-15 06:23:02

标签: c++ mysql c endianness

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

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

感谢。

更新 OS依赖函数或c / c ++标准库在mysql项目中受到高度限制,在这种情况下很难使用。

2 个答案:

答案 0 :(得分:1)

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

其原型应位于<arpa/inet.h>

<强>更新

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

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

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

答案 1 :(得分:0)

您可以将N列中从偏移量s开始的32位Little Endian原始整数数据转换为十进制:

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

我发现此页面正在寻找一种更有效的方法,而无需编写UDF。使用UDF既简单又非常高效-您无需任何库调用即可手工完成,但是您必须了解C,并且必须具有足够的服务器访问权限才能安装UDF,在诸如Amazon RDS或Aurora之类的产品上是不可能的。