在lua中将字节数组转换为double

Rag*_*ava 0 java lua bit-manipulation redis

Redis(键值存储)支持lua脚本 - 它在服务器上执行脚本.我正在使用Java客户端与Redis进行交互.我将一个字节数组传递给lua,在lua中,我必须将其转换为int或string.

以下是java代码片段

byte[] exclScore = ByteBuffer.allocate(8).putDouble(1.5).array();
args.add(exclScore);
Run Code Online (Sandbox Code Playgroud)

args是byte []类型的ArrayList

以下是我试过的lua脚本

byteScore = table.remove(ARGV)
size = string.len(byteScore)
x = string.sub(byteScore,1,1)
local output = 0
for i = 1,size do
  bit = tonumber(string.sub(byteScore,i,1))
  val2 = bit * (2 ^ i)
  output = output + val2
end
return output
Run Code Online (Sandbox Code Playgroud)

ARGV是接收java客户端发送的所有参数的表,分数是最后一个条目.我检查了类型(byteScore),结果证明是字符串.tonumber()返回一个nil(这是我得到的错误,因为我将它乘以2)

无论如何我们可以在lua中将这个字节数组转换为double(1.5)的double或string表示形式?请注意,我们不能在redis脚本中使用任何外部lua库.

任何帮助表示赞赏.提前致谢.

Nic*_*las 5

Lua不是一种低级语言.它不知道如何处理字节数组.

从理论上讲,你可以写一个二进制到双解码器(虽然这很难,因为Lua 5.1没有任何位操作的东西).但是你花时间尝试传递Lua所理解的Lua数据的时间会更好.Lua可以将字符串转换为数字,因此您可以向Lua传递该数字的字符串表示形式.

在Lua之外清理您的数据.