Board logo

标题: [原创] vbs版文本十六进制转换器 [打印本页]

作者: a2002    时间: 2017-7-26 11:29     标题: vbs版文本十六进制转换器

本帖最后由 a2002 于 2017-7-26 11:55 编辑

对于十六进制编辑,大家应该都知道吧,
我研究了一下,弄出了vbs的二字节型字符码到一字节型字符码的转换,在文件末的function中,
...也不好说什么,直接上源码:
  1. rem ToHex made by a2002
  2. if Wscript.Arguments.Count=0 then wscript.Quit
  3. strLoadFile=wscript.Arguments(0)
  4. set fso=createobject("scripting.FileSystemObject")
  5. set open=fso.opentextfile(strLoadFile)
  6. do while open.atendofstream=false
  7. line=open.readline
  8. for i=1 to len(line)
  9. hx=hexex(mid(line,i,1))
  10. all=all+hx
  11. next
  12. all=all+"0D 0A "
  13. loop
  14. write="Address   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F"+chr(13)+chr(10)
  15. for i=1 to int(len(all)/48)
  16. write=write+right("00000000"+hex(i*16-16),8)+" "
  17. write=write+mid(all,i*48-47,48)+chr(13)+chr(10)
  18. next
  19. if len(all) mod 48 = 0 then
  20. write=left(write,len(write)-2)
  21. else
  22. write=write+right("00000000"+hex(i*16-16),8)+" "
  23. for i=1 to len(all) mod 48
  24. write=write+mid(all,int(len(all)/48)*48+i*3-2,3)
  25. next
  26. end if
  27. set open=fso.opentextfile(strLoadFile,2)
  28. open.write write
  29. open.close
  30. msgbox "Text to hex successfully"
  31. function hexex(str)
  32. str=asc(str)
  33. if str < 0 then
  34. str=str+65536
  35. lefts=int(str/256)
  36. rights=str-lefts*256
  37. lefts=right("0"+hex(lefts),2)
  38. rights=right("0"+hex(rights),2)
  39. hexex=lefts+" "+rights+" "
  40. else
  41. str=right("0"+hex(str),2)
  42. hexex=str+" "
  43. end if
  44. end function
复制代码
处理文本的结果:
  1. Address   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
  2. 00000000 69 66 20 57 73 63 72 69 70 74 2E 41 72 67 75 6D
  3. 00000010 65 6E 74 73 2E 43 6F 75 6E 74 3D 30 20 74 68 65
  4. 00000020 6E 20 77 73 63 72 69 70 74 2E 51 75 69 74 0D 0A
  5. 00000030 73 74 72 4C 6F 61 64 46 69 6C 65 3D 77 73 63 72
  6. 00000040 69 70 74 2E 41 72 67 75 6D 65 6E 74 73 28 30 29
  7. 00000050 0D 0A 73 65 74 20 66 73 6F 3D 63 72 65 61 74 65
  8. 00000060 6F 62 6A 65 63 74 28 22 73 63 72 69 70 74 69 6E
  9. 00000070 67 2E 46 69 6C 65 53 79 73 74 65 6D 4F 62 6A 65
  10. 00000080 63 74 22 29 0D 0A 73 65 74 20 6F 70 65 6E 3D 66
  11. 00000090 73 6F 2E 6F 70 65 6E 74 65 78 74 66 69 6C 65 28
  12. 000000A0 73 74 72 4C 6F 61 64 46 69 6C 65 29 0D 0A 64 6F
  13. 000000B0 20 77 68 69 6C 65 20 6F 70 65 6E 2E 61 74 65 6E
  14. 000000C0 64 6F 66 73 74 72 65 61 6D 3D 66 61 6C 73 65 0D
  15. 000000D0 0A 09 6C 69 6E 65 3D 6F 70 65 6E 2E 72 65 61 64
  16. 000000E0 6C 69 6E 65 0D 0A 09 66 6F 72 20 69 3D 31 20 74
  17. 000000F0 6F 20 6C 65 6E 28 6C 69 6E 65 29 0D 0A 09 09 68
  18. 00000100 78 3D 68 65 78 65 78 28 6D 69 64 28 6C 69 6E 65
  19. 00000110 2C 69 2C 31 29 29 0D 0A 09 09 61 6C 6C 3D 61 6C
  20. 00000120 6C 2B 68 78 0D 0A 09 6E 65 78 74 0D 0A 09 61 6C
  21. 00000130 6C 3D 61 6C 6C 2B 22 30 44 20 30 41 20 22 0D 0A
  22. 00000140 6C 6F 6F 70 0D 0A 77 72 69 74 65 3D 22 41 64 72
  23. 00000150 65 73 73 20 20 20 20 30 20 20 31 20 20 32 20 20
  24. 00000160 33 20 20 34 20 20 35 20 20 36 20 20 37 20 20 38
  25. 00000170 20 20 39 20 20 41 20 20 42 20 20 43 20 20 44 20
  26. 00000180 20 45 20 20 46 22 2B 63 68 72 28 31 33 29 2B 63
  27. 00000190 68 72 28 31 30 29 0D 0A 66 6F 72 20 69 3D 31 20
  28. 000001A0 74 6F 20 69 6E 74 28 6C 65 6E 28 61 6C 6C 29 2F
  29. 000001B0 34 38 29 0D 0A 09 77 72 69 74 65 3D 77 72 69 74
  30. 000001C0 65 2B 72 69 67 68 74 28 22 30 30 30 30 30 30 30
  31. 000001D0 30 22 2B 68 65 78 28 69 2A 31 36 2D 31 36 29 2C
  32. 000001E0 38 29 2B 22 20 22 0D 0A 09 77 72 69 74 65 3D 77
  33. 000001F0 72 69 74 65 2B 6D 69 64 28 61 6C 6C 2C 69 2A 34
  34. 00000200 38 2D 34 37 2C 34 38 29 2B 63 68 72 28 31 33 29
  35. 00000210 2B 63 68 72 28 31 30 29 0D 0A 6E 65 78 74 0D 0A
  36. 00000220 69 66 20 6C 65 6E 28 61 6C 6C 29 20 6D 6F 64 20
  37. 00000230 34 38 20 3D 20 30 20 74 68 65 6E 0D 0A 09 77 72
  38. 00000240 69 74 65 3D 6C 65 66 74 28 77 72 69 74 65 2C 6C
  39. 00000250 65 6E 28 77 72 69 74 65 29 2D 32 29 0D 0A 65 6C
  40. 00000260 73 65 0D 0A 09 77 72 69 74 65 3D 77 72 69 74 65
  41. 00000270 2B 72 69 67 68 74 28 22 30 30 30 30 30 30 30 30
  42. 00000280 22 2B 68 65 78 28 69 2A 31 36 2D 31 36 29 2C 38
  43. 00000290 29 2B 22 20 22 0D 0A 09 66 6F 72 20 69 3D 31 20
  44. 000002A0 74 6F 20 6C 65 6E 28 61 6C 6C 29 20 6D 6F 64 20
  45. 000002B0 34 38 0D 0A 09 09 77 72 69 74 65 3D 77 72 69 74
  46. 000002C0 65 2B 6D 69 64 28 61 6C 6C 2C 69 6E 74 28 6C 65
  47. 000002D0 6E 28 61 6C 6C 29 2F 34 38 29 2A 34 38 2B 69 2A
  48. 000002E0 33 2D 32 2C 33 29 0D 0A 09 6E 65 78 74 0D 0A 65
  49. 000002F0 6E 64 20 69 66 0D 0A 73 65 74 20 6F 70 65 6E 3D
  50. 00000300 66 73 6F 2E 6F 70 65 6E 74 65 78 74 66 69 6C 65
  51. 00000310 28 73 74 72 4C 6F 61 64 46 69 6C 65 2C 32 29 0D
  52. 00000320 0A 6F 70 65 6E 2E 77 72 69 74 65 20 77 72 69 74
  53. 00000330 65 0D 0A 6F 70 65 6E 2E 63 6C 6F 73 65 0D 0A 6D
  54. 00000340 73 67 62 6F 78 20 22 73 75 63 63 65 73 73 66 75
  55. 00000350 6C 22 0D 0A 0D 0A 66 75 6E 63 74 69 6F 6E 20 68
  56. 00000360 65 78 65 78 28 73 74 72 29 0D 0A 09 73 74 72 3D
  57. 00000370 61 73 63 28 73 74 72 29 0D 0A 09 69 66 20 73 74
  58. 00000380 72 20 3C 20 30 20 74 68 65 6E 0D 0A 09 09 73 74
  59. 00000390 72 3D 73 74 72 2B 36 35 35 33 36 0D 0A 09 09 6C
  60. 000003A0 65 66 74 73 3D 69 6E 74 28 73 74 72 2F 32 35 36
  61. 000003B0 29 0D 0A 09 09 72 69 67 68 74 73 3D 73 74 72 2D
  62. 000003C0 6C 65 66 74 73 2A 32 35 36 0D 0A 09 09 6C 65 66
  63. 000003D0 74 73 3D 72 69 67 68 74 28 22 30 22 2B 68 65 78
  64. 000003E0 28 6C 65 66 74 73 29 2C 32 29 0D 0A 09 09 72 69
  65. 000003F0 67 68 74 73 3D 72 69 67 68 74 28 22 30 22 2B 68
  66. 00000400 65 78 28 72 69 67 68 74 73 29 2C 32 29 0D 0A 09
  67. 00000410 09 68 65 78 65 78 3D 6C 65 66 74 73 2B 22 20 22
  68. 00000420 2B 72 69 67 68 74 73 2B 22 20 22 0D 0A 09 65 6C
  69. 00000430 73 65 0D 0A 09 09 73 74 72 3D 72 69 67 68 74 28
  70. 00000440 22 30 22 2B 68 65 78 28 73 74 72 29 2C 32 29 0D
  71. 00000450 0A 09 09 68 65 78 65 78 3D 73 74 72 2B 22 20 22
  72. 00000460 0D 0A 09 65 6E 64 20 69 66 0D 0A 65 6E 64 20 66
  73. 00000470 75 6E 63 74 69 6F 6E 0D 0A
复制代码

作者: 老刘1号    时间: 2017-7-26 13:10

用处不大,文本还用看hex?
作者: a2002    时间: 2017-7-26 13:12

回复 2# 老刘1号


    最近在练笔
作者: 老刘1号    时间: 2017-7-26 13:15

回复 3# a2002


    支持,学vbs的人太少,多一个也挺好
作者: a2002    时间: 2017-7-26 13:20

回复 4# 老刘1号


    vbs和C哪个更快?
作者: 老刘1号    时间: 2017-7-26 13:24

回复 5# a2002


    晕,有可比性吗
不过要是C算法写不好没准还没有VBS快
其他:
看看这个
  1. Wscript.Echo Join(ReadBinary(Wscript.Arguments(0))," ")
  2. Function ReadBinary(FileName)
  3.   Dim Buf(), I
  4.   With CreateObject("ADODB.Stream")
  5.     .Mode = 3: .Type = 1: .Open: .LoadFromFile FileName
  6.     ReDim Buf(.Size - 1)
  7.     For I = 0 To .Size - 1: Buf(I) = AscB(.Read(1)): Next
  8.     .Close
  9.   End With
  10.   ReadBinary = Buf
  11. End Function
复制代码

作者: 老刘1号    时间: 2017-7-26 13:30

不过你的算法功底应该不差
作者: 523066680    时间: 2017-7-26 14:23

life is short, you need ... other language except vbs/batch script
作者: a2002    时间: 2017-7-26 14:31

回复 8# 523066680


    语言随便学习学习而已,重要的是思路
作者: 523066680    时间: 2017-7-26 14:45

本帖最后由 523066680 于 2017-7-26 15:04 编辑

回复 9# a2002

       思路才重要的说法是那种熟悉各种语言优劣的大师级别的人适合说的。JAVA C C++ C#  F# 尚不必做过多的争执,做的东西怎么样还是看人。
但是部分脚本语言:{vbs batchscript} 对比 {ruby python perl js racket lua ... } 阵营,孰优孰劣是很明显的事情。

事实上,对于刚学会几门语言的人来说,选择第一第二编程语言非常重要,语言决定了视野,影响着思维的广度和深度,参考《程序员的呐喊》
作者: a2002    时间: 2017-7-26 14:57

深奥的东西看不懂,想评分又超24小时限了,好无奈
作者: 523066680    时间: 2017-7-26 15:05

本帖最后由 523066680 于 2017-7-26 15:31 编辑

回复 11# a2002

    评分就不要了吧(扣分就更不要了吧

说一种极端情况:
当一种语言为了实现某个功能,代码写起来比C语言长,构思起来比C语言复杂,跑起来比C编译的程序慢,这就很尴尬了……


读取脚本自身的内容并输出16进制码:
  1. use IO::Handle;
  2. use File::Slurp;
  3. STDOUT->autoflush(1);
  4. my $all = read_file( __FILE__, {binmode=>':raw'});
  5. printf "Address  ";
  6. grep { printf "%2X ", $_ } ( 0 .. 15);
  7. print "\n";
  8. my $n = 1;
  9. for my $e ( split('', $all) )
  10. {
  11.     printf "%08X ", $n if ( ($n-1) % 16 == 0);
  12.     printf "%02X ", ord( $e );
  13.     print "\n" if ( $n % 16 == 0);
  14.     $n++;
  15. }
复制代码
难怪老刘那个这么短,不带格式化输出,再补一个
  1. use File::Slurp;
  2. grep
  3. {
  4.     printf "%02X ", ord($_);
  5.     print "\n" if (++$n % 16 == 0);
  6. }
  7. split "", read_file( __FILE__, {binmode=>':raw'});
复制代码
相信 python ruby 做这个事也是极其利索的。
作者: a2002    时间: 2017-7-26 15:10

也是,以后写游戏会注意的
作者: 老刘1号    时间: 2017-7-26 18:27

回复 10# 523066680


    不是很赞同
vbs学学可以,以后可以考虑转vb.net
个人认为用vb.net当语言开发游戏是极好的
不过大型游戏都用别人写的引擎,语言差异似乎不是这么重要了
作者: 老刘1号    时间: 2017-7-26 22:39

本帖最后由 老刘1号 于 2017-7-26 23:31 编辑

补充下,那个读2进制的函数块可不是我写的(据demon透露,作者是某个不知名老外)
这个在我的作品双字节字符2hex里就有说明过,再澄清下(不说清楚了感觉怪怪的)
作者: a2002    时间: 2017-7-27 07:42

回复 15# 老刘1号


    x10




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2