批处理之家's Archiver

a2002 发表于 2017-7-26 11:29

vbs版文本十六进制转换器

[i=s] 本帖最后由 a2002 于 2017-7-26 11:55 编辑 [/i]

对于十六进制编辑,大家应该都知道吧,
我研究了一下,弄出了vbs的二字节型字符码到一字节型字符码的转换,在文件末的function中,
...也不好说什么,直接上源码:[code]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[/code]处理文本的结果:[code]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 [/code]

老刘1号 发表于 2017-7-26 13:10

用处不大,文本还用看hex?

a2002 发表于 2017-7-26 13:12

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201572&ptid=44832]2#[/url] [i]老刘1号[/i] [/b]


    最近在练笔

老刘1号 发表于 2017-7-26 13:15

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201573&ptid=44832]3#[/url] [i]a2002[/i] [/b]


    支持,学vbs的人太少,多一个也挺好

a2002 发表于 2017-7-26 13:20

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201574&ptid=44832]4#[/url] [i]老刘1号[/i] [/b]


    vbs和C哪个更快?

老刘1号 发表于 2017-7-26 13:24

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201575&ptid=44832]5#[/url] [i]a2002[/i] [/b]


    晕,有可比性吗
不过要是C算法写不好没准还没有VBS快
其他:
看看这个[code]
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
[/code]

老刘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

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201581&ptid=44832]8#[/url] [i]523066680[/i] [/b]


    语言随便学习学习而已,重要的是思路

523066680 发表于 2017-7-26 14:45

[i=s] 本帖最后由 523066680 于 2017-7-26 15:04 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=201582&ptid=44832]9#[/url] [i]a2002[/i] [/b]

       思路才重要的说法是那种熟悉各种语言优劣的大师级别的人适合说的。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

[i=s] 本帖最后由 523066680 于 2017-7-26 15:31 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=201584&ptid=44832]11#[/url] [i]a2002[/i] [/b]

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

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


读取脚本自身的内容并输出16进制码:[code]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++;
}
[/code]难怪老刘那个这么短,不带格式化输出,再补一个[code]use File::Slurp;

grep
{
    printf "%02X ", ord($_);
    print "\n" if (++$n % 16 == 0);
}
split "", read_file( __FILE__, {binmode=>':raw'});
[/code]相信 python ruby 做这个事也是极其利索的。

a2002 发表于 2017-7-26 15:10

也是,以后写游戏会注意的

老刘1号 发表于 2017-7-26 18:27

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201583&ptid=44832]10#[/url] [i]523066680[/i] [/b]


    不是很赞同
vbs学学可以,以后可以考虑转vb.net
个人认为用vb.net当语言开发游戏是极好的
不过大型游戏都用别人写的引擎,语言差异似乎不是这么重要了

老刘1号 发表于 2017-7-26 22:39

[i=s] 本帖最后由 老刘1号 于 2017-7-26 23:31 编辑 [/i]

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

a2002 发表于 2017-7-27 07:42

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=201628&ptid=44832]15#[/url] [i]老刘1号[/i] [/b]


    x10

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.