将表格分割并发送十六进制密钥

我正在尝试将一个表格转换为十六进制密钥,并将这些密钥按照原始字符串的顺序存储在另一个表格中。

我找到了一个函数,使用一些在线帮助可以将一个字符串拆分为每个字符并将该字符分配给表格中的一个空间。

因此,如果我编写function("Hello World!"), 函数的返回值将是table={H,e,l,l,o,,W,o,r,l,d,!})

现在我需要将其限制为仅接受16个字符,并且任何超过该长度的字符均被丢弃。

该功能如下:

local str = "Hello World"
local chars = {}

for c in string.gmatch(str,".")do
chars[#chars+1]=c
end

我该如何将其限制为表格中的16个元素?

我的第二个问题是,在创建此表格之后,我如何改变此表格的每个元素为一个十六进制密钥,并按照原始字符串的顺序存储到另一个表格中?

编辑1:感谢luke10000建议使用if char..方法,它完美地运行。现在下一步是将其转换为十六进制并将其放入表格中。 我找到了一个可以执行此操作的函数,但完全没有解释,我只能将所有十六进制密钥打印到控制台上。

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")  — 将字符添加到十六进制密钥前面
end end

for _,chars in ipairs(chars) do

hex_dump(chars)end

原文链接 https://stackoverflow.com/questions/69372326

点赞
stackoverflow用户2858170
stackoverflow用户2858170

我不确定你的帖子的其余部分与你实际的问题有关。

我正在尝试将我拥有的具有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))
2021-09-29 13:46:29