返回列表 发帖

【出题】批处理打印所有ASCII字符

本帖最后由 plp626 于 2011-6-16 18:38 编辑

这道题的解答,对新手需要熟练掌握的for变量延迟处理
对老鸟,需要熟练掌握变量的多级访问技巧,还需要熟练排序算法
实乃新手进阶,老鸟练功 的首选试题!



调用ascmap.cmd文件(在这里下载http://www.bathome.net/thread-12347-1-1.html

打印所有ascii码字符,打印格式如下,要对齐显示
  0 0x00 <NUL>   |  32  0x20 <space>   |  64  0x40 @       |  96  0x60 `
  1 0x01        |  33  0x21 !         |  65  0x41 A       |  97  0x61 a
...                    ...
128 0x80         | 160 0xA0  ....
...COPY
cmd下不可显示的字符有0x00 0x07 0x08 0x09 0x0a 0x0d 0x20
打印的时候分别用<NUL> <BELL>  <BS>  <TAB> <LF> <CR> <SPACE>代替

PS: 分栏的时候,竖杠用ASCII 0xb3 表示更好看些

新手,老鸟,欢迎参与;
==============
对于老鸟,增加下难度:
除了打印出ascii表外,按照if 命令单字符的比较顺序
把0x00~0xff的所有字符也打印出来,打印格式相同(把0x00字符放在第一个)

按if命令的判断顺序,格式输出,不简单,涉及到变量三级指针访问,顶起来。

思考中。。。
SOS --- >> lllsoslll@163.com

TOP

本帖最后由 qzwqzw 于 2011-6-9 22:30 编辑

更换为以16进制码值为单位打印的
同时根据楼主的要求改换为4栏打印
再进一步比较大小没有时间完成了
有兴趣的可以继续
:: ASCPrint.cmd - 按照特定形式打印ASCII字符集 - qzwqzw
@echo %debug% off & setlocal EnableDelayedExpansion & chcp 437 & cls
call ascmap.cmd ascmap
for /l %%i in (1,1,255) do set "$%%i=!ascmap:~%%i,1!"
set values="$0=<NUL>" "$7=<BELL>" "$8=<BS>" "$9=<TAB>" "$10=<LF>" "$13=<CR>" "$32=<SPACE>"
for %%v in (%values%) do set %%v
for %%s in ("0-2-4-6 1-3-5-7" "8-A-C-E 9-B-D-F") do (
    for %%t in (%%~s) do (
        for %%i in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do (
            for /f "tokens=1-4 delims=-" %%a in ("%%t") do (
                set values="h1=%%a%%i" "h2=%%b%%i" "h3=%%c%%i" "h4=%%d%%i"
                for %%v in (!values!) do set %%v
                for %%j in (1 2 3 4) do (
                    set /a d%%j=0x!h%%j!
                    set "n%%j=  !d%%j!"
                    for %%v in ($!d%%j!) do set "ch%%j=!%%v!       "
                    set out%%j=!n%%j:~-3! 0x!h%%j! !ch%%j:~0,7!
                )
                echo  !out1! %$179% !out2! %$179% !out3! %$179% !out4!
            )
        )
    )
    echo.
)
if "%~0"=="%~f0" pauseCOPY
1

评分人数

    • plp626: 不错,谢谢参与PB + 2
天的白色影子

TOP

规定的打印形式比较怪异
为什么只分两栏?
贴一个近似的
以10进制码值计算偏移
应该也可以以16进制码值计算偏移
:: ASCPrint.cmd - 按照特定形式打印ASCII字符集 - qzwqzw
@echo off & setlocal EnableDelayedExpansion & chcp 437 & cls
call ascmap.cmd ascmap
for /l %%i in (1,1,255) do set "$%%i=!ascmap:~%%i,1!"
set values="$0=<NUL>" "$7=<BELL>" "$8=<BS>" "$9=<TAB>" "$10=<LF>" "$13=<CR>" "$32=<SPACE>"
for %%v in (%values%) do set %%v
for /l %%i in (0,1,3) do (
for /l %%j in (0,1,31) do (
set /a n1=%%i*64+%%j,n2=%%i*64+32+%%j
cmd /c exit /b !n1!
set "no1=  !n1! !=ExitCode:~-2!"
for %%i in (!n1!) do set "ch1=!$%%i!       "
cmd /c exit /b !n2!
set "no2=  !n2! !=ExitCode:~-2!"
for %%i in (!n2!) do set "ch2=!$%%i!       "
echo !no1:~-6! !ch1:~0,7!  ^|  !no2:~-6! !ch2:~0,7!
)
echo.
)COPY
1

评分人数

    • plp626: 分四栏,是我没描述好,可否更新下代码PB + 6 技术 + 1
天的白色影子

TOP

本帖最后由 plp626 于 2011-6-11 16:12 编辑

2# zm900612


不需要,只要下载了ascmap.cmd文件到windows目录下使用很傻瓜的:
@echo off
setlocal enabledelayedexpansion
chcp 437
call ascmap $
echo !$:~0x01,1! !$:~0x09,1! !$:~0x30,1! !$:~0x09,1! !$:~0x80,1!
pauseCOPY

TOP

看起来比较难的样子
前阵子没有关注过那几个特定帖子的人,估计对这题无从下手吧,要不要把链接给...

TOP

返回列表