Lua 读取二进制文件并转化为十六进制

Lua 读取二进制文件并转化为十六进制,第1张

最近在写 Lua 脚本,需要读取二进制文件并转化为十六进制的字符串,C语言读文件,返回的是字符串类型,Lua 返回的也是字符串类型(用的时候忘记去查类型了,导致这个地方浪费了很长的时间。。。),由于找解决方法找了蛮长时间的,所有在这里先记录一下。

local function readAll(filePath)

--

local f = assert(io.open(filePath, "rb"))

local content = f:read("*all")

f:close()

return content

end

local function bytesToHexStr(filePath)

--

local content = readAll(filePath)

local result = ""

local len = string.len(content)

for i = 1, len do

local charcode = tonumber(string.byte(content, i, i))

local hexstr = string.format("%02X", charcode)

result = result .. hexstr

end

return result

end

有一个小问题,顺便记录一下,在读取了二进制文件后,本想用print打印看看内容有没有被读出来,结果只打印了一部分,用 notepad++ 打开发现,文件有很多 NUL 的字符,原因是 print 在遇到 NUL 就结束打印了,囧o(╯□╰)o

十六进制转二进制可以参考这个: Lua小程序:十六进制字符串和二进制数据间的转换

首先, LUA 和 java/vb 之类的根本不是一种类型的。 LUA 的设计思想就是作为一门可以非常方便的嵌入到 C 程序中的语言。所以它很简单,很轻量。一般不会单独用它来做一个【独立或大型】项目,因为它提供的库太少了,很多东西都要自己重新写。 记住,它的设计思想就是和C搭配起来用的。因此我估计按照你所说的未来的需求,lua不是一个好选择。 但我不是说 LUA 不好,而是说不符合你的需求。LUA 本身的设计是非常优秀的。

如果想学一门脚本类语言,目前最好最主流的建议是 python。 1. 用它的人太多了,各种文档资料也是非常丰富,有面相新手的,面向各个方向的(网站,文本处理,数学处理,DB,游戏编程)资料。 2. 丰富的库。 3. 各种最新的编程思想(比如函数式编程、closure、coroutine等)在python中都有【一定】的体现,可以学到不少新概念。4. 不论是写个简单的小程序还是复杂的网站程序,都可以用python。

java 当然是另外一个范畴了,如果你想学,也没任何问题,他天生就是做大事的(虽然我没学过)。

vb 不了解,貌似会限制你今后的发展,除了windows编程可能用到它,unix/linux上好像没有这玩意。但是现在大家都在玩 unix/linux……

mfc, 好遥远的名字啊,十几年前我在学校的时候曾经以为它就是世界上唯一的最牛的编程框架 (当然,那时候它确实也很火),可惜从学校出来后再也没有见过需要用到它的地方。现在谁还用它? 现在玩的是跨平台,快速迭代,动态语言,函数式编程,分布式,并发…… 谁还会成天去学一个仅仅是为了做个 GUI 的玩意 (如果我这里对 MFC 的评价失实,请原谅,毕竟我对它的唯一了解是在十几年前看了那么几天)

另, 你的 C 玩的怎么样? 我现在的认识是, C (当然也可以是C++,不过对我来说c就够了,C++哪些面向对象之类的概念,用高级语言去做,更简单) + 一门高级语言 (如 LUA, python)是最王道的方案。C 处理底层的,性能关键的代码(代码量不应该多,保持简洁,易于维护), 高级语言负责实现上层的,业务或逻辑层面的内容,可以快速开发,方便修改和调试。

综上,建议你学python,简单易学。实际上lua也很简单,比python还简单,学了python看两天lua的文档自然就会了。至于其他语言 java看你自己的兴趣和今后的发展决定是否要学。 mfc/vb 这种过于限制死的内容,还是等你真的到工作那一天不得不用他们的时候再去学吧。在学校里,学会程序员的思想,培养编程经验才是最重要的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/10894525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存