Lua 如何逐字节写入双值

Lua 如何逐字节写入双值,lua,double,byte,Lua,Double,Byte,我必须与dll和it lua通信,这是我用来按字节写入字符串的函数: writeString = function(pid, process, address, value) local i = 1 while i <= String.Length(value) do local byte = string.byte(value, i, i) DLL.CallFunction("hook.dll", "writ

我必须与dll和it lua通信,这是我用来按字节写入字符串的函数:

writeString = function(pid, process, address, value)
        local i = 1
        while i <= String.Length(value) do
            local byte = string.byte(value, i, i)
            DLL.CallFunction("hook.dll", "writeMemByte", pid..','..process..','..address + (i-1)..','..byte, DLL_RETURN_TYPE_INTEGER, DLL_CALL_CDECL)
            i = i + 1
        end
        DLL.CallFunction("hook.dll", "writeMemByte", pid..','..process..','..address + (i-1)..',0', DLL_RETURN_TYPE_INTEGER, DLL_CALL_CDECL)
    end

有许多库可供Lua使用,它们可以做到这一点。 如果需要生成的字节数组(字符串),应该这样做;您可以找到随附的Windows预编译二进制文件

如果您对使用double与外部代码进行接口更感兴趣,我建议您采用不同的方法,使用一个外部函数接口库,它允许您直接调用C函数

如果您能够,我甚至更强烈地建议您切换到Lua的即时编译器,它提供了C和汇编的功能、速度和范围,但具有Lua的灵活性


如果这些解决方案都不可行,我可以提供一些代码来序列化double(目前无法访问)。

我的第一个建议是:尝试找到一个函数,它接受表示double而不是double的字符串。实现lua端将非常容易,因为您已经有了一个
writeString
——它可能与以下内容非常类似:

writeDouble = function(pid, process, address, value)
  writeString(pid, process, address, tostring(value))
end
如果您没有该函数,但可以访问dll源,您可以尝试自己添加该函数;它不应该比获取字符串然后调用它复杂得多

如果你真的不能修改dll,那么你需要弄清楚库所期望的双精度格式——有很多因素可以改变这种格式。举例来说,使用的语言和编译器、操作系统和编译器标志

如果dll使用标准格式,例如,该格式通常会有来自/2位的文档化“翻译”。否则,你可能不得不自己开发它们


祝你好运

如果您能找到序列化double的代码,我将非常感谢,我将研究这些库,但它只是程序的一小部分,我不想添加整个库,因为它是值得的。谢谢,这是一个很好的答案,我将研究这些选项。
writeDouble = function(pid, process, address, value)
  writeString(pid, process, address, tostring(value))
end