尝试索引数字值
2021-2-4 11:45:32
收藏:0
阅读:141
评论:1
GetSPLListResponse = "030200"
-- 播放列表容器
playlistsUUID = {}
playlistname = {}
-- 与服务器的TCP连接
address = Properties[“IP_Address”].Value
port = 11730
sock = TcpSocket.New()
sock.ReadTimeout = 0
sock.WriteTimeout = 0
sock.ReconnectTimeout = 5
sock.EventHandler = function(sock, evt, err)
if evt == TcpSocket.Events.Connected then
print("服务器已连接")
elseif evt == TcpSocket.Events.Reconnect then
print("服务器正在重新连接...")
elseif evt == TcpSocket.Events.Data then
print("服务器有数据")
print("Socket缓冲区长度: " .. sock.BufferLength)
buflen = sock.BufferLength
message = sock:Read(buflen)
messagestring =
-- 将HEX消息转换为字符串
message:gsub(
'.',
function(c)
return string.format('%02X', string.byte(c))
end
)
print("HEX转字符串后的消息:" .. messagestring)
if string.find(messagestring, GetSPLListResponse) then -- 获取SPL UUID列表
print("已收到GetSPLList响应")
playlistsUUID = math.floor((#message - 16) / 16) -- 计算播放列表的数量
print("已计算播放列表数:" .. playlistsUUID)
for i = 1, playlistsUUID do -- 将每个播放列表数据放入数组中
playlistsUUID[i] = string.sub(messagestring, i * 16, i * 16 + 16) -- 将数据分为16个字节的片段放入数组中
end
Controls.PlaylistBox.Choices = playlistsUUID
我试图创建一个包含远程服务器上每个可用播放列表UUID的数组,但当执行 playlistsUUID[i] = string.sub(messagestring, i * 16, i * 16 + 16) 时,我收到一个 尝试索引数字值(全局变量‘playlistsUUID’) 错误。
HEX转换为字符串后的典型 messagestring 为:060E2B340205010A0E100101010302008300002D000000010000000200000010AD17FC696B49454DB17D593DB3E553E59BF5455689ED4C019731C6DD3C071F0E00
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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 代码?

我认为你需要一个额外的变量
PlaylistCount才能让它工作。如果你用
math.floor重写变量playlistsUUID,那么playlistsUUID就变成了一个数字类型。后来,当你写playlistsUUID[i]的时候,你试图引用一个表(table),但是playlistsUUID的类型是数字(number)。因此,由于类型不正确,Lua 会抛出执行错误。GetSPLListResponse = "030200" -- 播放列表容器 playlistsUUID = {} playlistname = {} -- 与服务器的TCP连接 address = Properties["IP_Address"].Value port = 11730 sock = TcpSocket.New() sock.ReadTimeout = 0 sock.WriteTimeout = 0 sock.ReconnectTimeout = 5 sock.EventHandler = function(sock, evt, err) if evt == TcpSocket.Events.Connected then print("服务器已连接") elseif evt == TcpSocket.Events.Reconnect then print("服务器重新连接中...") elseif evt == TcpSocket.Events.Data then print("服务器有数据") print("Socket缓冲区长度:" .. sock.BufferLength) buflen = sock.BufferLength message = sock:Read(buflen) messagestring = -- 将HEX消息转换为字符串 message:gsub( '.', function(c) return string.format('%02X', string.byte(c)) end ) print("HEX转换为字符串之后的消息:" .. messagestring) if string.find(messagestring, GetSPLListResponse) then -- 获取SPL UUID列表 print("已收到GetSPLList应答") PlaylistCount = math.floor((#message - 16) / 16) -- 计算播放列表的数量 print("计算得到的播放列表数量为:" .. PlaylistCount) for i = 1, PlaylistCount do -- 将每个播放列表数据放入一个数组中 playlistsUUID[i] = string.sub(messagestring, i * 16, i * 16 + 16) -- 将数据划分为16字节的块,放入数组中 end Controls.PlaylistBox.Choices = playlistsUUID