各位看一下我这个写法可不可以
![](http://tb2.bdstatic.com/tb/editor/images/face/i_f15.png?t=20140803)
991CNX(VerC)异常教程
0 操作与技巧
(待补)
1 字符与字符转换器
同学们,你们知道字符转换器吗?就是那个1shift8↓27,它几乎是一切异常的开头。它的原理就要从字符讲起。
首先要明白“字符”(char)和“字节”(byte)这两个概念。字节是一个数据单位,占8个二进制位,也就是2位十六进制。而字符是一类数据,可能占1或2个字节。在接下来的所有文章中,字符和字节都会这样表示:字符“1”=字符31(31是字符“1”的编码),字符“Ran#”=字符FD18(FD18是字符“Ran#”的编码);字符“1”包含一个字节31。特殊地,字节00又叫NUL。
双字节字符的前一个字节以F开头。例如,如果把字符FD18(“Ran#”)的第一个字节改为0D,它就会变成两个字符0D(@)和18(@)。相反地,把字符串4E31(“@1”)的第一个字节改为FE,它就会变成一个字符FE31(“l.y.>m”)。(此处应有字符表
![](http://tb2.bdstatic.com/tb/editor/images/face/i_f25.png?t=20140803)
)
输入区的长度为200字节,一开始全都是NUL。在式子最左边按←时,或者在历史记录中按←时,光标都会移动到第一个NUL处。
字符转换器需要用到字符“lbf/in2>kPa”(FE23)(shift8↓27)。输入1和lbf/in2>kPa,按=,↑。由于某些原因(今后会讲),在历史记录里,字节23会被吃掉,只剩下字节FE,和后面的NUL拼起来,就是
31 FE 00 00 ...
(字符FE00没有宽度看不到,所以显示出来只有一个1)按←,光标移动到第一个NUL处,也就是FE后面:
31 FE|00 00 ...
为什么光标好像在1上?其实这是光标的默认位置,如果显示器找不到光标(就像这里,它插在双字节字符中间),光标就会留在原来的位置不动,大小也不会改变。按一下←就会发现光标跑到了1后面(在字符FE00上),再按←才会真的移动到1上。如果打开小字体,你就会发现这个光标也是小的,虽然小字体并不影响数学模式。这是因为光标的默认大小是根据线性模式确定的。因此各位千万不要被光标位置骗了。接下来,输入字符“1”(31):
31 FE 31|00 ...
此时会显示“1l.y.>m”。FE31这个字符本来是打不出的,但被我们通过字符转换器得到了。这就是字符转换器。
如果在刚才输入第二个字符“1”的位置输入双字节字符会发生什么?输入字符“Pa>kgf/in2”(FE20)(shift8↓26):
31 FE FE 20|00 00 ...
此时会显示“1Unknowi”,其中字符Unknow就是FEFE。按←,光标向左移动一个字符(FE20),看起来好像没有移动:
31 FE|FE 20 00 00 ...
这是因为它插在双字节字符中间,找不到了。再按一下←才会移动到字符FEFE上:
31|FE FE 20 00 00 ...
这里讲一下按←或→时会发生什么。当你按←时,如果前
两个字节正好是一个双字节字符,那就跳过这个字符;反之,则只跳过一个字节。类似的,按→时,如果后一个字节以F开头,就跳过两个字节,反之跳过一个字节。
按→,向右移动一个字符(FEFE),到字符“i”(20)上:
31 FE FE|20 00 00 ...
然后就可以删掉字符FEFE了。你看,计算模式中本来不能打出i,但是它也可以用字符转换器得到。回到上一步,在字符FEFE和字符20之间插入字符“Ran#”(FD18),接下来按←:
31 FE FE FD 18|20 00 00 ...
31 FE FE|FD 18 20 00 00 ...
输入字符“1”:
31 FE FE 31|FD 18 20 00 ...
现在按DEL会删除双字节字符FE31:
31 FE|FD 18 20 00 00 00 ...
你看,输入了31,却删除了FE31。删除字符的方式和按←差不多,但是注意如果前一个字节以F开头,就会把这个字节以及后一个字节都删掉,比如31 FE|FD 32和31 FE FD|32删除都得到31 32。此时显示“1(一坨)@”,“(一坨)”就是FEFD。光标没有移动,是因为它在双字节字符FEFD中间。如果此时想删除单字节字符18(“@“),那是行不通的,因为前面有FD,会被识别成双字节字符FD18。必须把它们隔开才能删除字符18。按←再按→,把光标移动到18上:
31 FE FD|18 20 00 00 00 ...
然后输入任意双字节字符(以“Ran#”(FD18)为例):
31 FE FD FD 18|18 20 00 ...
这样18和FEFD隔开了,就可以正常地删除。把字符18(“@”)和前面的FD18(“Ran#”)都删了,使FEFD和20接触:
31 FE FD|20 00 00 00 00 ...
按→再按←,光标移动到FEFD中间:
31 FE|FD 20 00 00 00 00 ...
现在输入1:
31 FE 31|FD 20 00 00 00 ...
此时显示的是“1l.y.>man”,把其他字符都删掉,就获得了字符“an”(FD20)。这个字符将来用处很大。
例1 尝试打出字符FD31。
参考答案:mn(n为下标)
参考思路:法一(不推荐):查字符表得FD31为shift732
此法应用于能直接打出的字符较为方便,但对大量无法直接打出的字符无能为力。
法二:已知FD18为Ran#可直接打出,为得到FD31,需设法将光标移至FD与18之间以插入31。由上文可知,若能得到FEFD,就可以将光标移至目标位置。由本节开头得操作可得31FE,请读者熟记这个操作,这是日后许多编辑操作的起点。在31 FE后输入FD18,←←→即可使光标到达目标位置。输入1,←,再输入1,得:
31 FE 31|FD 31 18
删去FE31即得FD31。
例2 尝试打出字符FB31。
提示:①出现语法错误不要惊慌,按AC ←即可回到最左侧。
②此题完成过程中可能出现字符FEFB,该字符不可见,请谨慎完成后续操作。
③先按sto再按x即可输入FB18。
参考答案:上标1
参考思路:上文的法一已不可用,本题思路与上文法二一致。先输入31 FE FB 18,此时会发生语法错误,但AC ←仍可继续编辑,原理按下不表。再按→→,光标位于FB|18之间,依次输入1,←,1即得FB31。
例题总结:类似上述两例的问题都可通过类似的思路得到结果:①使所需字符相邻,如例一中使FD与31相邻
②拆除原有的双字节字符以得到目标字符,如例二中原本FEFB为一个双字节字符,我们通过在FE与FB之间插入31使FB与后面的31结合得到目标字符。