gpt4 book ai didi

file - 在lua中解析文件的二进制文件

转载 作者:行者123 更新时间:2023-12-04 15:05:32 25 4
gpt4 key购买 nike

我需要你的帮助。我有一个包含二进制文件的文件。我知道一个数据包以 0x7E 开头。我想要一个文件的大表,然后将表拆分为每个表以 0x7E 开头的表。我现在开始将二进制文件转换为十六进制并使用它,但我认为使用二进制文件会更容易,但我不知道该怎么做。例如二进制文件的一行:

我已经可以读入文件,将其转换为十六进制并找到文件中 0x7E 的数量。加上文件的长度。但数量和长度不是必需的。另外我认为使用字符串是错误的,因为字节长度。你能帮我解析文件吗?我也考虑过使用回调函数,但我不知道该怎么做。我是新来的。那是我目前的代码:

local function read_file(path) --function read_file
local file = io.open(path, "rb") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*all" -- *all reads the whole file
file:close()
return content
end

function string.tohex(str)
return (str:gsub('.',function(c)
return string.format('%02X',string.byte(c))
end))
end

local fileContent = read_file("H:/wireshark/rstp_dtc_0.dat"); --passes file content to function read_file
inhalt = (fileContent):tohex()

s=inhalt
t={}
for k in s:gmatch"(%x%x)" do
table.insert(t,tonumber(k,16))
end

function tablelength(T)
local count = 0
for _ in pairs (T) do count = count +1 end
return count
end

length = tablelength(t)
print(length)

counter = 0

local items = t
for _, v in pairs(items) do
if v == 0x7E then
counter = counter+1
end
end

print(counter)

感谢您的帮助!

最佳答案

一种解决方案是使用 string.gmatch 从文件内容中提取以 "\x7e" 开头的子字符串

local packets = {}
for packetstr in data:gmatch("\x7e[^\x7e]+") do
table.insert(packets, {packetstr:byte(1, #packetstr)})
end

这样您就可以使用 Lua 的模式匹配功能,因此您不必编写自己的数据包逻辑。

关于file - 在lua中解析文件的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66225148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com