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

时间:2014-02-14 14:40:59

标签: string lua

有人可以帮我解决字符串连接问题。我从寄存器中读取数据。它的功能是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)

enter image description here

3 个答案:

答案 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)