Originally posted by s11ss at 2007-11-27 20:51:
zh159兄,你的转换多位的代码与我的代码相比也不见得不啰嗦啊~~~~~~~~
不好意思,我收回这句话。
其实各有优缺点。
你的简单但降低了代码可读性而且加大了“程序处理量”(0-9都替换了),我的啰嗦但提高了代码可读性。
在“程序处理量”方面,你的处理量应该更大:
call set r=%%r:10=A%%
call set r=%%r:11=B%%
call set r=%%r:12=C%%
call set r=%%r:13=D%%
call set r=%%r:14=E%%
call set r=%%r:15=F%%
call set r%1=%r%%%r%1%%
这部分也是一个替换过程,每次转换都要历经六次替换,0-9的数据也会一样处理,只不过0-9里面没有“10-15”数字,不会替换出A-F;
我那个简化的(原出处应该是不得不爱版主)虽然降低了代码可读性,但只要一次过替换(实际上是字符截取),效率高些
其实只要对比一下就可以发现相同的地方
:10to16
set/a q=%1
:1c
set/a r=%q%%%16
set/a q=%q%/16
call set r=%%r:10=A%%
call set r=%%r:11=B%%
call set r=%%r:12=C%%
call set r=%%r:13=D%%
call set r=%%r:14=E%%
call set r=%%r:15=F%%
call set r%1=%r%%%r%1%%
if not %q% equ 0 goto :1c
call set r=%%r%1%%
:10to16
set H=0123456789ABCDEF
set/a q=%1
:1c
set/a r=%q%%%16
set/a q=%q%/16
call set r=%%H:~%r%,1%%
call set r%1=%r%%%r%1%%
if not %q% equ 0 goto :1c
call set r=%%r%1%%
Originally posted by s11ss at 2007-11-27 20:51:
Brother zh159, your code for converting multiple digits is no less wordy than mine~~~~~~~~
I'm sorry, I take that back.
Actually, each has its own advantages and disadvantages.
Yours is simple but reduces code readability and increases "program processing volume" (replaces 0-9 all). Mine is wordy but improves code readability.
In terms of "program processing volume", your processing volume should be larger:
call set r=%%r:10=A%%
call set r=%%r:11=B%%
call set r=%%r:12=C%%
call set r=%%r:13=D%%
call set r=%%r:14=E%%
call set r=%%r:15=F%%
call set r%1=%r%%%r%1%%
This part is also a replacement process. Each conversion has to go through six replacements. Data from 0-9 is also processed the same way. It's just that there are no "10-15" numbers in 0-9, so A-F won't be replaced out;
The simplified one I have (the original source should be the version of the moderator Budu Bu Ai) although it reduces code readability, but only needs one-time replacement (actually character interception), which is more efficient
In fact, you can find the same place by just comparing
:10to16
set/a q=%1
:1c
set/a r=%q%%%16
set/a q=%q%/16
call set r=%%r:10=A%%
call set r=%%r:11=B%%
call set r=%%r:12=C%%
call set r=%%r:13=D%%
call set r=%%r:14=E%%
call set r=%%r:15=F%%
call set r%1=%r%%%r%1%%
if not %q% equ 0 goto :1c
call set r=%%r%1%%
:10to16
set H=0123456789ABCDEF
set/a q=%1
:1c
set/a r=%q%%%16
set/a q=%q%/16
call set r=%%H:~%r%,1%%
call set r%1=%r%%%r%1%%
if not %q% equ 0 goto :1c
call set r=%%r%1%%