本帖最后由 plp626 于 2012-3-2 02:13 编辑
问题背景:密码存储的问题,以及编码存储的问题产生的。。。
该问题自己完成顿觉吃力,且不甚满意,故放在论坛,求助众人智慧- :: 版本一,支持字母,数字,下划线
- set str=0123_ABCDXYZabcdxyz
- rem 代码?
- echo %ans%
复制代码 则输出48 49 50 51 95 65 66 67 68 88 89 90 97 98 99 100 120 121 122- :: 版本二,支持尽量多的字符(0x20~0x7f)
- setlocal enabledelayedexpansion
- set str= ^^!"$%%&'()*+,-./09:;<=>?@AZ[^_`az|}~
- rem 代码?
- echo %ans%
复制代码 则输出32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 57 58 59 60 61 62 63 64 65 90 91 95 96 97 122 124 125 126
------------------------------------------------------------------
为方便比较:
测试代码以执行一次@echo off为参照,计算代码耗时比值,从而大略消除因为各人系统配置不同而带来的耗时比较问题
代码要求:
没有要求,
尽管可以掉三方,外部命令,只要能在循环体内很节省时间地调用(就只怕得不偿失)
为方便统一比较效率,强烈建议使用统一测试代码;
测试代码如下:- @echo off
-
- :: 获得100000次执行 @echo off 任务的耗时,存放在ct1变量内
- set t1=%time%
- for /l %%a in (1 1 100000)do @echo off
- set t2=%time%
- call:etime t1 t2 tc1
-
- :: 初始工作(该处可省略),比如定义一些变量等,以便后面高效执行你的代码
- rem 。。。。
-
- :: 获得500次执行“你的代码”任务的耗时,存放在ct2变量内
- set t1=%time%
- for /l %%a in (1 1 500)do (
- set str=0123_ABCDXYZabcdxyz
- rem 版本一代码(或者版本二代码,但相应的str值请更换)
- echo %ans%
- )
- set t2=%time%
- call:etime t1 t2 tc2
-
- :: 计算执行一次“你的代码”与执行一次“@echo off”的耗时比
- set/a rate=200*tc2/tc1
- echo 一次任务与一次“@echo off命令”耗时比=%rate%
- pause
-
- :etime <begin> <end> <ret> //求时差
- setlocal enabledelayedexpansion
- Set/a "c=(!%2:~,2!-!%1:~,2!)*360000+(1!%2:~3,2!-1!%1:~3,2!)*6000+1!%2:~-5,2!!%2:~-2!-1!%1:~-5,2!!%1:~-2!,c+=-8640000*(c>>31)"
- endlocal&set %3=%c%&goto:eof
-
- :: 某些标签子过程,(该处可省略)
- :label
- rem ....
复制代码 建议大家先别贴自己代码,先贴代码运行后的比值
请连续运行3次以上,多次求平均值以减小误差(比值越小自然代码效率越高),最后再亮代码,这样很有意思(代码别太长) |