【发布时间】:2019-02-13 18:26:50
【问题描述】:
我对 lua 和一般编程比较陌生(自学),所以请温柔!
无论如何,我编写了一个 lua 脚本来读取游戏中的 UDP 消息。消息的结构是:
DATAxXXXXaaaaBBBBccccDDDDeeeeFFFFggggHHHH
DATAx = 4 letter ID and x = control character
XXXX = integer shows the group of the data (groups are known)
aaaa...HHHHH = 8 single-precision floating point numbers
最后一个是我需要解码的数字。
如果我将收到的消息打印出来,类似于:
DATA*{V???A?A?...etc.
使用 string.byte(),我得到了这样的字节流(我已经“格式化”了字节以反映上面的结构。
68 65 84 65/42/20 0 0 0/237 222 28 66/189 59 182 65/107 42 41 65/33 173 79 63/0 0 128 63/146 41 41 65/0 0 30 66/0 0 184 65
前 5 个字节当然是 DATA*。接下来的4个是第20组数据。接下来的字节,即我需要解码的字节,等于这些值:
237 222 28 66 = 39.218
189 59 182 65 = 22.779
107 42 41 65 = 10.573
33 173 79 63 = 0.8114
0 0 128 63 = 1.0000
146 41 41 65 = 10.573
0 0 30 66 = 39.500
0 0 184 65 = 23.000
我找到了使用 BitConverter.ToSingle() 进行解码的 C# 代码,但我还没有为 Lua 找到类似的代码。 有什么想法吗?
【问题讨论】:
-
您能否举一个在使用
string.byte()之前收到的完整消息的示例? -
这里是一个使用 print() 的例子。 DATA*{V???A?A??:?y?g(???%A???: 不是上面的,而是类似的。
-
您是如何确定上述字节数组的值的(例如,
0 0 128 63 = 1.0000? -
游戏是X-Plane飞行模拟器,这些数值可以在游戏中显示。这是capture from the game。它们是飞机的位置(坐标、高度等)
标签: lua floating-point coronasdk floating-point-conversion lua-5.1