有人可以帮我解决字符串连接问题。我从寄存器中读取数据。它的功能是utf(regAddr,长度)。我得到带有十进制数的表,然后我将其转换为十六进制并循环串。我需要将这些字符串连接成一个。 在Lua中没有类似。= operator
的东西function utf(regAddr, length)
stringTable = {}
table.insert(stringTable, {mb:readregisters(regAddr-1,length)})
for key, value in pairs(stringTable) do
for i=1, length do
v = value[i]
v = lmcore.inttohex(v, 4)
v = cnv.hextostr(v)
log(v)
end
end
end
-- function(regAddr, length)
utf(30,20)
答案 0 :(得分:5)
字符串没有追加运算符。字符串是不可变的值。
..
运算符连接两个字符串,结果产生第三个字符串:
local b = "con"
local c = "catenate"
local a = b .. c -- "concatenate"
table.concat
函数连接表中的字符串,生成字符串结果:
local t = { "con", "catenate" }
local a = table.concat(t) -- "concatenate"
local t = { "two", "words" }
local a = table.concat(t, " ") -- "two words"
string.format
函数采用带有兼容值列表的格式模式,生成字符串结果:
local b = 2
local c = "words"
local a = string.format("%i %s", b, c) -- "2 words"
local t = { 2, "words" }
local a = string.format("%i %s", unpack(t)) -- "2 words"
如果要累积很多最终想要连接的字符串,可以使用表作为临时数据结构,并在累积完成时连接:
local t = {}
for i = 1, 1000 do
table.insert(t, tostring(i))
end
local a = table.concat(t) -- "1234...9991000"
对于非常多的字符串,您可以逐步连接。请参阅LTN 9: Creating Strings Piece by Piece及相关讨论。
答案 1 :(得分:3)
您应该尝试table.concat方法。
也许这个问题可以帮到你:
答案 2 :(得分:0)
此代码有效:
function utf(regAddr, length)
stringTable = {}
table.insert(stringTable, {mb:readregisters(regAddr-1,length)})
for key, value in pairs(stringTable) do
t = {}
for i=1, length do
v = value[i]
v = lmcore.inttohex(v, 4)
v = cnv.hextostr(v)
table.insert(t, v)
end
a = table.concat(t)
end
end
-- function(regAddr, length)
utf(30,20)