将表格转换为字节数组。
2011-9-6 13:22:32
收藏:0
阅读:132
评论:2
我试图将 Lua 表格转换为 C# 字节数组。我能够通过以下方式将其转换为双精度浮点数数组:
> 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
更改为字节数组(dbl_arr = Byte[4]
),那么我会得到以下错误:``(错误对象不是字符串)`
我尝试了很多不同的方法都没有成功。任何帮助将不胜感激。
更新:
我通过执行以下操作获得了更多的错误信息:
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)
我从这里安装了luaforwindows。它的版本为5.1.4-45。我正在运行 Microsoft Windows XP Professional Version 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 <-- 错误出现在此处
原文链接 https://stackoverflow.com/questions/7167229
点赞
stackoverflow用户95573
我找到了解决这个问题的方法。尽管我仍然好奇为什么上面的方法不起作用,但是我会在这里发布这个方法。
这是解决方法。我基本上创建了一个MemoryStream
,使用WriteByte
函数强制将值转换为Byte(因为该函数没有重载部分,它只接受一个字节)。然后我调用ToArray
从MemoryStream
中获取byte[]
:
> require 'CLRPackage'
> import "System"
> tbl = {11,22,33,44}
> mem_stream = MemoryStream()
> for i,v in ipairs(tbl) do mem_stream:WriteByte(v) end
> byte_arr = mem_stream:ToArray()
> for i=0,byte_arr.Length-1 do Console.WriteLine(string.format("%d", byte_arr:GetValue(i))) end
11
22
33
44
2011-09-06 17:00:26
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我怀疑此问题的原因是
Console.WriteLine
没有接收Byte
参数的重载方法。我对 Lua 的了解不够,但在 C# 中,我会调用
GetValue(i).ToString()
或Convert.ToString(GetValue(i), 16)
,并将其结果传递给Console.WriteLine
函数。编辑-如注释所述:
然后,您需要将其转换为 Byte - 在 C# 中,我会做类似
dbl_arr:SetValue((Byte)0,4)
或dbl_arr:SetValue((Byte)v,4)
的操作。在 Lua 中,我不知道该如何实现。编辑2-如注释所述:
double
是 8 个字节,而Single/float
是 4 个字节。