Lua:从二进制读取十六进制值

时间:2012-01-23 07:38:48

标签: string lua hex character

我正在尝试从二进制文件中读取十六进制值。我没有提取字符串并将字母转换为十六进制值的问题,但是如何使用控制字符和其他不可打印的字符呢?有没有一种方法可以直接以十六进制值读取字符串而无需转换它?

2 个答案:

答案 0 :(得分:3)

查看here

  

作为最后一个示例,以下程序转储二进制文件。同样,第一个程序参数是输入文件名;输出转到标准输出。程序以10个字节的块为单位读取文件。对于每个块,它写入每个字节的十六进制表示,然后将块写为文本,将控制字符更改为点。

local f = assert(io.open(arg[1], "rb"))
local block = 10
while true do
  local bytes = f:read(block)
  if not bytes then break end
  for b in string.gfind(bytes, ".") do
    io.write(string.format("%02X ", string.byte(b)))
  end
  io.write(string.rep("   ", block - string.len(bytes) + 1))
  io.write(string.gsub(bytes, "%c", "."), "\n")
end

答案 1 :(得分:3)

从你的问题来看,目前还不清楚你的目标是什么,所以我会给出两种方法。

要么文件已满十六进制值,请按以下方式读取:

s='ABCDEF1234567890'
t={}
for val in s:lower():gmatch'(%x%x)' do
    -- do whatever you want with the data
    t[#t+1]=s:char(val)
end

或者您有一个二进制文件,并将其转换为十六进制值:

s='kl978331asdfjhvkasdf'
t={s:byte(1,-1)}