我正在尝试将Lua表转换为C#字节数组。我能够将其转换为Double数组,如下所示:

> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> dbl_arr = Double[4]
> dbl_arr:GetValue(0)
> dbl_arr:GetValue(1)
> for i=0,3 do Console.WriteLine(dbl_arr:GetValue(i)) end
0
0
0
0
> for i,v in ipairs(tbl) do dbl_arr:SetValue(v,i-1) end
> for i=0,3 do Console.WriteLine(dbl_arr:GetValue(i)) end
11
22
33
44
>

但是,如果我将dbl_arr更改为Byte数组(dbl_arr = Byte[4]),则会收到以下错误:(error object is not a string)
我已经尝试了很多不同的事情,但是没有运气。任何帮助,将不胜感激。

更新:

通过执行以下操作,我可以从错误中获取更多信息:
suc,err = pcall(function() byte_arr:SetValue(12,0) end)

现在suc为false,并且err返回以下消息:
SetValue failed
System.ArgumentException: Cannot widen from source type to target type either
   because the source type is a not a primitive type or the conversion cannot
   be accomplished.
at System.Array.InternalSetValue(Void* target, Object value)
at System.Array.SetValue(Object value, Int32 index)

我已经从here安装了luaforwindows。它是版本5.1.4-45。我正在运行Microsoft Windows XP Professional版本2002 Service Pack 3

更新:

这是示例代码,发生错误的地方
> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> dbl_arr = Byte[4]
> for i,v in ipairs(tbl) do dbl_arr:SetValue(v,i-1) end <-- Error occurs here

最佳答案

我怀疑原因是 Console.WriteLine 没有需要Byte的重载。

我对Lua不太了解-在C#中,我将调用 GetValue(i).ToString() Convert.ToString(GetValue(i), 16) 并将该调用的结果提供给Console.WriteLine

编辑-根据评论:

然后,您需要转换为字节-在C#中,我将执行dbl_arr:SetValue((Byte)0,4)dbl_arr:SetValue((Byte)v,4)之类的操作-我不知道这是如何完成的Lua。

编辑2-根据评论:double是8个字节,Single/float是4个字节。

关于.net - 将表转换为字节数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7167229/

10-17 01:44