Lua:从二进制文件中读取十六进制值

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

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

点赞
stackoverflow用户255688
stackoverflow用户255688

请看这里的示例:

作为最后一个示例,下面的程序生成了一个二进制文件的转储。同样地,第一个程序参数是输入文件名,输出被写入标准输出。程序每次读取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
2012-01-23 08:11:26
stackoverflow用户513763
stackoverflow用户513763

从您的问题中并不清楚您想要做什么,因此我将提供2种方法。

要么您有一个充满十六进制值的文件,并像这样读取它:

s='ABCDEF1234567890'
t={}
for val in s:lower():gmatch'(%x%x)' do
    -- 对数据进行您想做的任何操作
    t[#t+1]=s:char(val)
end

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

s='kl978331asdfjhvkasdf'
t={s:byte(1,-1)}
2012-01-23 08:14:20