免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: __BlueGuy__
打印 上一主题 下一主题

[函数] 纪念我的第一个Lua程序 [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
41 [报告]
发表于 2012-10-20 20:12 |只看该作者
回复 40# __BlueGuy__


    lua这么方便为什么不用?上面的程序已经满足要求了。你是要C,还是说要exe的可执行?我可以把那个lua包装成exe的。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
42 [报告]
发表于 2012-10-20 20:14 |只看该作者
本帖最后由 starwing83 于 2012-10-20 20:23 编辑

回复 40# __BlueGuy__


    输出是一串数字?不是二进制的文件?

下面的程序直接输出那堆文本的数字:
  1. local input = io.read "*a"
  2.     :gsub("^char%s*%w+%b[]%b[]%s*=%s*", "")

  3. local res = assert(load("return "..input))()

  4. --[[
  5. -- write to file
  6. local function write_short(n)
  7.     io.write(("%c%c"):format(math.floor(n/256)%256, n%256))
  8. end

  9. local function write_byte(n)
  10.     io.write(("%c"):format(n%256))
  11. end
  12. --]]

  13. local t = {}
  14. local function write_short(n)
  15.     t[#t+1] = math.floor(n/256)%256
  16.     t[#t+1] = n%256
  17. end
  18. local function write_byte(n)
  19.     t[#t+1] = n%256
  20. end

  21. write_short(#res)
  22. for i, v in ipairs(res) do
  23.     write_short(#v)
  24.     for i, v in ipairs(v) do
  25.         write_byte(v)
  26.     end
  27. end

  28. for i, v in ipairs(t) do
  29.     io.write(("%02d"):format(v))
  30.     if i % 16 == 0 then
  31.         io.write '\n'
  32.     elseif i % 2 == 0 then
  33.         io.write ' '
  34.     end
  35. end
  36. io.write '\n'

  37. -- cc: run+='< in.txt'
复制代码

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
43 [报告]
发表于 2012-10-20 20:17 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-20 20:18 编辑
starwing83 发表于 2012-10-20 20:14
回复 40# __BlueGuy__


是二进制的,Lua 是方便,只是感觉不自然...

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
44 [报告]
发表于 2012-10-20 20:23 |只看该作者
回复 42# starwing83

-- cc: run+='< in.txt > out.txt'

你可以用 Lua的io 吗? fopen 之类的, 你这个我没法跑啊...
   

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
45 [报告]
发表于 2012-10-20 20:24 |只看该作者
回复 43# __BlueGuy__


    二进制的,我的第一份代码就足够了。

刚开始这么觉得是正常了,久了你就习惯了~~

恩,才20行,可以给你包装成一个200K一下的exe,怎么样?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
46 [报告]
发表于 2012-10-20 20:25 |只看该作者
脚本嘛, 一定要选一个公认优秀的, 就像python的设计一样.

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
47 [报告]
发表于 2012-10-20 20:26 |只看该作者
回复 44# __BlueGuy__


    这就是lua的io啊,跑是这样的:

假设你保存成genbin.lua,那么这么跑:

lua genbin.lua < in.txt

然后就直接输出二进制到终端了。

lua genbin.lua < in.txt > out.txt

就把二进制输出给文件了。

如果是windows,写一个小小的bat文件就可以让你把拖到bat上的文件转换出来了。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
48 [报告]
发表于 2012-10-20 20:27 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-10-20 20:28 编辑

回复 45# starwing83

-- cc: run+='< in.txt > out.txt'
你把这个换成 io 读写, 那样我的 luaForWindows就可以方便的跑了,谢谢 ,!
命令行太麻烦了...
   

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
49 [报告]
发表于 2012-10-20 20:29 |只看该作者
回复 46# linux_c_py_php


    python的语法设计是还可以,不过python本身金玉其外。

另外,“公认”的未必优秀。js是公认用得最多的脚本吧?但是这货是一个员工赶公司进度在一周内设计出来的………………

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
50 [报告]
发表于 2012-10-20 20:31 |只看该作者
回复 48# __BlueGuy__


    io读写换成什么样子的?读第一个参数指代的文件名?还是读一个特定文件?还是读别的什么?

你在程序的最开始加一行:

io.input "in.txt"

这样就读当前目录下的in.txt文件了。

如果是:

io.input((...))

就是读第一个参数指代的文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP