如何使用循环将字符串拼接成一个字符串?

有人能帮我解决字符串拼接的问题吗?我从寄存器中读取数据,使用了函数 utf(regAddr, length)。我得到的是一个包含十进制数的表格,然后我在循环中将其转换为十六进制并转换为字符串。我需要将这些字符串拼接在一起。Lua 中没有 .= 运算符。

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)

enter image description here

点赞
用户815672
用户815672

你应该尝试使用 table.concat 方法。

也许这个问题可以帮助你:

2014-02-14 15:26:34
用户2226988
用户2226988

在 Lua 中,字符串没有附加运算符。字符串是不可变值。

.. 运算符连接两个字符串,产生第三个字符串作为结果:

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 以及相关讨论。

2014-02-15 01:14:49
用户3159120
用户3159120

这段代码可以正常工作:

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)
2014-02-15 14:23:08