Lua字符串,在每个备用索引处插入一个整数

Lua字符串,在每个备用索引处插入一个整数,lua,Lua,假设我有一个包含“abcdef”的字符串 我想要另一个字符串str2,其中包含str1的所有字符,并且在每个备用索引中都包含整数1,如 str2:byte(1) = 1 str2:byte(2) = 'a' str2:byte(3) = 1 str2:byte(4) = 'b' str2:byte(5) = 1 str2:byte(6) = 'c' 等等 我能做的最快的方法是什么。首先,在Lua中不能这样做赋值,也就是说,string.byte()不用于设置字节 您可以通过以下方式迭代str1

假设我有一个包含“abcdef”的字符串

我想要另一个字符串str2,其中包含str1的所有字符,并且在每个备用索引中都包含整数1,如

str2:byte(1) = 1
str2:byte(2) = 'a'
str2:byte(3) = 1
str2:byte(4) = 'b'
str2:byte(5) = 1
str2:byte(6) = 'c'
等等


我能做的最快的方法是什么。

首先,在Lua中不能这样做赋值,也就是说,
string.byte()
不用于设置字节

您可以通过以下方式迭代
str1
中的字符并逐个字符构建
str2

local str1 = "abc"
local str2 = ""
for i=1,#str1 do
    str2 = str2..string.sub(str1,i,i)..string.char(1)
end
当然,如果打印的是str2,它看起来会像str1,但它们的长度会有所不同:

print(str1,str2)
print(#str1, #str2)
为您提供以下输出:

abc     abc
3       6
另一方面,如果您真正想要的是生成一个类似“a1b1c1”的字符串,那么在
str1
中字符的循环中,您需要执行以下操作:

str2 = str2..string.sub(str1,i,i).."1"
如果您使用
string.byte()
检查
str2

for i=1,#str2 do
     print( string.byte( str2, i ) )
end
你会得到这个的

97
1
98
1
99
1

其中97是“a”的ASCII字节,98是“b”的字节,等等。

让Lua用
gsub做艰苦的工作:

str1 = "abcdef"
str2 = str1:gsub("(.)","%1\001")
print(str1:byte(1,-1))
print(str2:byte(1,-1))
这个输出

97  98  99  100 101 102
97  1   98  1   99  1   100 1   101 1   102 1

谢谢什么是string.char(0),它将给出什么值。?我想要str2第一个元素应该是1,第二个元素应该来自str1(1),第三个元素1和第四个元素来自str1(2),依此类推。。。。“string.char和string.byte函数在字符及其内部数字表示形式之间进行转换。函数string.char获取零个或多个整数,将每个整数转换为一个字符,并返回一个连接所有这些字符的字符串。”(来自“Lua编程”)哦,这是真的。对不起,我编辑了答案使其为1。另请参见关于“1”与1的注释。哦,这很好!但我想他想要
str2=str1:gsub((.),”%1\001“
(即在原始字符串中的每个字符后添加一个\001。是的,使用str2=str1:gsub(“(”),“%1\001”),获得所需的结果在我希望将str2设置为1,a,1,b,1,c….的情况下,是否可能?明白了。我刚刚更改了str2=str1:gsub(“(”,“\001%1”)
97  98  99  100 101 102
97  1   98  1   99  1   100 1   101 1   102 1