【发布时间】:2021-05-19 08:24:23
【问题描述】:
我需要你的帮助。 我有一个包含二进制文件的文件。我知道一个数据包以 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)
感谢您的帮助!
【问题讨论】: