标题: 【出题】批处理打印所有ASCII字符 [打印本页]
作者: plp626 时间: 2011-6-9 18:57 标题: 【出题】批处理打印所有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 ....
- ...
复制代码
cmd下不可显示的字符有0x00 0x07 0x08 0x09 0x0a 0x0d 0x20
打印的时候分别用<NUL> <BELL> <BS> <TAB> <LF> <CR> <SPACE>代替
PS: 分栏的时候,竖杠用ASCII 0xb3 表示更好看些
新手,老鸟,欢迎参与;
==============
对于老鸟,增加下难度:
除了打印出ascii表外,按照if 命令单字符的比较顺序
把0x00~0xff的所有字符也打印出来,打印格式相同(把0x00字符放在第一个)
作者: CrLf 时间: 2011-6-9 19:41
看起来比较难的样子
前阵子没有关注过那几个特定帖子的人,估计对这题无从下手吧,要不要把链接给...
作者: plp626 时间: 2011-6-9 20:15
本帖最后由 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!
- pause
复制代码
作者: qzwqzw 时间: 2011-6-9 21:37
规定的打印形式比较怪异
为什么只分两栏?
贴一个近似的
以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.
- )
复制代码
作者: qzwqzw 时间: 2011-6-9 22:27
本帖最后由 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" pause
复制代码
作者: lllsoslll 时间: 2011-6-16 18:18
按if命令的判断顺序,格式输出,不简单,涉及到变量三级指针访问,顶起来。
思考中。。。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |