在Lua中将字节数组转换为float [浮点数据结构]

时间:2010-07-05 09:43:08

标签: floating-point lua memcpy

我有能力用Lua读取内存,但我遇到了问题。 我想读一个浮点值。

我有,我认为是浮动的,在看起来像这样的记忆中。

Byte Array 65 B6 40 43 EC 35 87 41 51 04 9E 3F
Float Value 192.712478637695

我知道浮点值,因为我正在使用内存编辑器。 在Lua中,我有一个类似于memcpy的函数,它叫做readmem(Address,bytes),它返回一个整数值。

如何使用readmem将字节数组读入Lua中的浮点数。

为了这个问题,我想你可以假设65中的6是地址00000000。

4 个答案:

答案 0 :(得分:4)

很奇怪,这似乎以中端顺序存储。 (我用http://www.h-schmidt.net/FloatApplet/IEEE754.html

检查了这个

无论如何,您可以使用http://yueliang.luaforge.net/

中的代码在纯Lua中进行转换

另见http://lua-users.org/lists/lua-l/2010-03/msg00910.html

如果您可以使用C,请尝试http://lua-users.org/wiki/StructurePacking

中列出的其中一个库

答案 1 :(得分:3)

要完成所有事情,这是相当多的工作。 您需要提取指数和有效数字(有效数字有时称为尾数),使用math.frexp转换为浮点数,然后在设置符号位时否定结果。您还必须识别非规范化数字和NaN。 (在标准化数字中,有效数字的最高有效位是隐式的;在非规范化数字中,它是显式的。) 如果您只是自己必须这样做,您会发现阅读Dave Goldberg关于计算机科学家需要了解浮点数的所有内容的文章会很有帮助。 另外请记住,Lua数是IEEE的两倍,并且要注意精度。

如果我自己这样做,我就无法忍受所有这些痛苦 - 而是编写C代码来读取字节并调用lua_pushnumber

答案 2 :(得分:0)

您必须编写C函数才能完成转换。 Lua没有演员表或类似的东西。

答案 3 :(得分:0)

string.pack

传递'f'作为第一个参数将返回单精度表示的4字节字符串,而'd'将返回双精度表示的8字节字符串。你甚至可以声明浮点数的字节顺序