标题: [原创] vbs版文本十六进制转换器 [打印本页]
作者: a2002 时间: 2017-7-26 11:29 标题: vbs版文本十六进制转换器
本帖最后由 a2002 于 2017-7-26 11:55 编辑
对于十六进制编辑,大家应该都知道吧,
我研究了一下,弄出了vbs的二字节型字符码到一字节型字符码的转换,在文件末的function中,
...也不好说什么,直接上源码:- rem ToHex made by a2002
- if Wscript.Arguments.Count=0 then wscript.Quit
- strLoadFile=wscript.Arguments(0)
- set fso=createobject("scripting.FileSystemObject")
- set open=fso.opentextfile(strLoadFile)
- do while open.atendofstream=false
- line=open.readline
- for i=1 to len(line)
- hx=hexex(mid(line,i,1))
- all=all+hx
- next
- all=all+"0D 0A "
- loop
- write="Address 0 1 2 3 4 5 6 7 8 9 A B C D E F"+chr(13)+chr(10)
- for i=1 to int(len(all)/48)
- write=write+right("00000000"+hex(i*16-16),8)+" "
- write=write+mid(all,i*48-47,48)+chr(13)+chr(10)
- next
- if len(all) mod 48 = 0 then
- write=left(write,len(write)-2)
- else
- write=write+right("00000000"+hex(i*16-16),8)+" "
- for i=1 to len(all) mod 48
- write=write+mid(all,int(len(all)/48)*48+i*3-2,3)
- next
- end if
- set open=fso.opentextfile(strLoadFile,2)
- open.write write
- open.close
- msgbox "Text to hex successfully"
-
- function hexex(str)
- str=asc(str)
- if str < 0 then
- str=str+65536
- lefts=int(str/256)
- rights=str-lefts*256
- lefts=right("0"+hex(lefts),2)
- rights=right("0"+hex(rights),2)
- hexex=lefts+" "+rights+" "
- else
- str=right("0"+hex(str),2)
- hexex=str+" "
- end if
- end function
复制代码
处理文本的结果:- Address 0 1 2 3 4 5 6 7 8 9 A B C D E F
- 00000000 69 66 20 57 73 63 72 69 70 74 2E 41 72 67 75 6D
- 00000010 65 6E 74 73 2E 43 6F 75 6E 74 3D 30 20 74 68 65
- 00000020 6E 20 77 73 63 72 69 70 74 2E 51 75 69 74 0D 0A
- 00000030 73 74 72 4C 6F 61 64 46 69 6C 65 3D 77 73 63 72
- 00000040 69 70 74 2E 41 72 67 75 6D 65 6E 74 73 28 30 29
- 00000050 0D 0A 73 65 74 20 66 73 6F 3D 63 72 65 61 74 65
- 00000060 6F 62 6A 65 63 74 28 22 73 63 72 69 70 74 69 6E
- 00000070 67 2E 46 69 6C 65 53 79 73 74 65 6D 4F 62 6A 65
- 00000080 63 74 22 29 0D 0A 73 65 74 20 6F 70 65 6E 3D 66
- 00000090 73 6F 2E 6F 70 65 6E 74 65 78 74 66 69 6C 65 28
- 000000A0 73 74 72 4C 6F 61 64 46 69 6C 65 29 0D 0A 64 6F
- 000000B0 20 77 68 69 6C 65 20 6F 70 65 6E 2E 61 74 65 6E
- 000000C0 64 6F 66 73 74 72 65 61 6D 3D 66 61 6C 73 65 0D
- 000000D0 0A 09 6C 69 6E 65 3D 6F 70 65 6E 2E 72 65 61 64
- 000000E0 6C 69 6E 65 0D 0A 09 66 6F 72 20 69 3D 31 20 74
- 000000F0 6F 20 6C 65 6E 28 6C 69 6E 65 29 0D 0A 09 09 68
- 00000100 78 3D 68 65 78 65 78 28 6D 69 64 28 6C 69 6E 65
- 00000110 2C 69 2C 31 29 29 0D 0A 09 09 61 6C 6C 3D 61 6C
- 00000120 6C 2B 68 78 0D 0A 09 6E 65 78 74 0D 0A 09 61 6C
- 00000130 6C 3D 61 6C 6C 2B 22 30 44 20 30 41 20 22 0D 0A
- 00000140 6C 6F 6F 70 0D 0A 77 72 69 74 65 3D 22 41 64 72
- 00000150 65 73 73 20 20 20 20 30 20 20 31 20 20 32 20 20
- 00000160 33 20 20 34 20 20 35 20 20 36 20 20 37 20 20 38
- 00000170 20 20 39 20 20 41 20 20 42 20 20 43 20 20 44 20
- 00000180 20 45 20 20 46 22 2B 63 68 72 28 31 33 29 2B 63
- 00000190 68 72 28 31 30 29 0D 0A 66 6F 72 20 69 3D 31 20
- 000001A0 74 6F 20 69 6E 74 28 6C 65 6E 28 61 6C 6C 29 2F
- 000001B0 34 38 29 0D 0A 09 77 72 69 74 65 3D 77 72 69 74
- 000001C0 65 2B 72 69 67 68 74 28 22 30 30 30 30 30 30 30
- 000001D0 30 22 2B 68 65 78 28 69 2A 31 36 2D 31 36 29 2C
- 000001E0 38 29 2B 22 20 22 0D 0A 09 77 72 69 74 65 3D 77
- 000001F0 72 69 74 65 2B 6D 69 64 28 61 6C 6C 2C 69 2A 34
- 00000200 38 2D 34 37 2C 34 38 29 2B 63 68 72 28 31 33 29
- 00000210 2B 63 68 72 28 31 30 29 0D 0A 6E 65 78 74 0D 0A
- 00000220 69 66 20 6C 65 6E 28 61 6C 6C 29 20 6D 6F 64 20
- 00000230 34 38 20 3D 20 30 20 74 68 65 6E 0D 0A 09 77 72
- 00000240 69 74 65 3D 6C 65 66 74 28 77 72 69 74 65 2C 6C
- 00000250 65 6E 28 77 72 69 74 65 29 2D 32 29 0D 0A 65 6C
- 00000260 73 65 0D 0A 09 77 72 69 74 65 3D 77 72 69 74 65
- 00000270 2B 72 69 67 68 74 28 22 30 30 30 30 30 30 30 30
- 00000280 22 2B 68 65 78 28 69 2A 31 36 2D 31 36 29 2C 38
- 00000290 29 2B 22 20 22 0D 0A 09 66 6F 72 20 69 3D 31 20
- 000002A0 74 6F 20 6C 65 6E 28 61 6C 6C 29 20 6D 6F 64 20
- 000002B0 34 38 0D 0A 09 09 77 72 69 74 65 3D 77 72 69 74
- 000002C0 65 2B 6D 69 64 28 61 6C 6C 2C 69 6E 74 28 6C 65
- 000002D0 6E 28 61 6C 6C 29 2F 34 38 29 2A 34 38 2B 69 2A
- 000002E0 33 2D 32 2C 33 29 0D 0A 09 6E 65 78 74 0D 0A 65
- 000002F0 6E 64 20 69 66 0D 0A 73 65 74 20 6F 70 65 6E 3D
- 00000300 66 73 6F 2E 6F 70 65 6E 74 65 78 74 66 69 6C 65
- 00000310 28 73 74 72 4C 6F 61 64 46 69 6C 65 2C 32 29 0D
- 00000320 0A 6F 70 65 6E 2E 77 72 69 74 65 20 77 72 69 74
- 00000330 65 0D 0A 6F 70 65 6E 2E 63 6C 6F 73 65 0D 0A 6D
- 00000340 73 67 62 6F 78 20 22 73 75 63 63 65 73 73 66 75
- 00000350 6C 22 0D 0A 0D 0A 66 75 6E 63 74 69 6F 6E 20 68
- 00000360 65 78 65 78 28 73 74 72 29 0D 0A 09 73 74 72 3D
- 00000370 61 73 63 28 73 74 72 29 0D 0A 09 69 66 20 73 74
- 00000380 72 20 3C 20 30 20 74 68 65 6E 0D 0A 09 09 73 74
- 00000390 72 3D 73 74 72 2B 36 35 35 33 36 0D 0A 09 09 6C
- 000003A0 65 66 74 73 3D 69 6E 74 28 73 74 72 2F 32 35 36
- 000003B0 29 0D 0A 09 09 72 69 67 68 74 73 3D 73 74 72 2D
- 000003C0 6C 65 66 74 73 2A 32 35 36 0D 0A 09 09 6C 65 66
- 000003D0 74 73 3D 72 69 67 68 74 28 22 30 22 2B 68 65 78
- 000003E0 28 6C 65 66 74 73 29 2C 32 29 0D 0A 09 09 72 69
- 000003F0 67 68 74 73 3D 72 69 67 68 74 28 22 30 22 2B 68
- 00000400 65 78 28 72 69 67 68 74 73 29 2C 32 29 0D 0A 09
- 00000410 09 68 65 78 65 78 3D 6C 65 66 74 73 2B 22 20 22
- 00000420 2B 72 69 67 68 74 73 2B 22 20 22 0D 0A 09 65 6C
- 00000430 73 65 0D 0A 09 09 73 74 72 3D 72 69 67 68 74 28
- 00000440 22 30 22 2B 68 65 78 28 73 74 72 29 2C 32 29 0D
- 00000450 0A 09 09 68 65 78 65 78 3D 73 74 72 2B 22 20 22
- 00000460 0D 0A 09 65 6E 64 20 69 66 0D 0A 65 6E 64 20 66
- 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快
其他:
看看这个- Wscript.Echo Join(ReadBinary(Wscript.Arguments(0))," ")
- Function ReadBinary(FileName)
- Dim Buf(), I
- With CreateObject("ADODB.Stream")
- .Mode = 3: .Type = 1: .Open: .LoadFromFile FileName
- ReDim Buf(.Size - 1)
- For I = 0 To .Size - 1: Buf(I) = AscB(.Read(1)): Next
- .Close
- End With
- ReadBinary = Buf
- 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进制码:- use IO::Handle;
- use File::Slurp;
- STDOUT->autoflush(1);
-
- my $all = read_file( __FILE__, {binmode=>':raw'});
-
- printf "Address ";
- grep { printf "%2X ", $_ } ( 0 .. 15);
- print "\n";
-
- my $n = 1;
- for my $e ( split('', $all) )
- {
- printf "%08X ", $n if ( ($n-1) % 16 == 0);
- printf "%02X ", ord( $e );
- print "\n" if ( $n % 16 == 0);
- $n++;
- }
复制代码
难怪老刘那个这么短,不带格式化输出,再补一个- use File::Slurp;
-
- grep
- {
- printf "%02X ", ord($_);
- print "\n" if (++$n % 16 == 0);
- }
- 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 |