我试图转换一个表,我有16个字符的限制十六进制键,然后存储这些十六进制键在另一个表在相同的顺序作为原始字符串。
我发现了一个函数,使用一些在线帮助,可以采取字符串,将其分成每个字符,并将该字符分配到表中的一个空间。
所以如果我写function("Hello World!")函数的返回值将是table= {H, e, l, l, o,, W, o, r, l, d, !)
现在我需要将其限制为只接受16个字符,超过16个字符将被丢弃。
函数如下
local str = "Hello World"
local chars = {}
for c in string.gmatch(str, ".") do
chars[#chars+1] = c
end
如何将表中的元素限制为16个?
我的第二个问题是在我创建这个表之后,我如何将这个表的每个元素更改为十六进制键,并以与原始字符串相同的顺序将其存储在另一个表中?
EDIT1:谢谢luke10000建议使用if字符。方法,效果很好。现在,下一部分是将其转换为十六进制并将其放入表中。我找到了一个可以做这个操作的函数,但是没有任何解释,我理解了一些,但不是全部。我只能在控制台打印所有的十六进制键。
function hex_dump(buf)
for byte=1, #buf, 16 do
local chunk = buf:sub(byte, byte+15)
--io.write(string.format('%08X ',byte-1)) -- 0's
chunk:gsub('.', function (c) io.write(string.format('0x%X ',string.byte(c))) end)
io.write(string.rep(' ',3*(16-#chunk)),"n")
--io.write(' ',chunk:gsub('%c','.'),"n") -- add the character infront of hex key
end end
for _, chars in ipairs(chars) do
hex_dump(chars) end
我不确定你的帖子的其余部分是如何与你的实际问题相关的。
我正试图转换一个表,我有16个字符的限制到然后将这些十六进制键存储在相同的另一个表中顺序与原字符串相同。
我也不知道你说的"十六进制键"是什么意思。
local input = {"H", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"}
local output = {}
for i,v in ipairs(input) do
output[i] = string.format("0x%X", v:byte())
if i == 16 then break end
end
print(table.concat(output, ", "))
关于你的其他问题:
local str = "Hello World" local chars = {} for c in string.gmatch(str, ".") do chars[#chars+1] = c end
如何将表中的元素限制为16个?
只需将输入字符串限制为16个字符。
for c in str:sub(1,16):gmatch(".") do
…
我的第二个问题是,在我创建这个表之后,我怎么去关于将该表的每个元素更改为十六进制键并存储它在另一个表在相同的顺序作为原始字符串?
如果您的实际问题是从字符串中获得数字表示表,只需使用string.byte
local str = "Hello world! This is a wonderful day.!"
local output = table.pack(str:byte(1, 16))