【问题标题】:Lua: Read hex values from binaryLua:从二进制文件中读取十六进制值
【发布时间】:2012-01-23 07:38:48
【问题描述】:

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

【问题讨论】:

    标签: string lua hex character


    【解决方案1】:

    查看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
    

    【讨论】:

    • 谢谢。原谅我的笨拙:)
    【解决方案2】:

    根据您的问题,不清楚您的具体目标是什么,因此我将提供 2 种方法。

    要么你有一个包含十六进制值的文件,然后像这样读取它:

    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)}
    

    【讨论】:

    • 感谢您的回复。我实际上是在尝试读取文件中某些偏移量的十六进制值。我现在使用 string.byte 来进行十进制转换,这对我的项目来说已经足够了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2014-02-25
    • 2015-05-01
    • 1970-01-01
    • 2015-05-15
    • 2015-01-26
    • 2022-01-17
    相关资源
    最近更新 更多