为什么OnChar里0x1a表示Ctrl_Z

来源:互联网 发布:网络瘫痪的原因 编辑:程序博客网 时间:2024/05/25 19:56

这样计算:Ctrl=0x40 ,所以Ctrl A =0x41-0x40=1.其他的Ctrl 类似. 
'/n'在ASCII中是'LF'(Line Feed)即换行,而'/r'在ASCII中是'CR'(Carriage Return)即回车. 
所以光有LF不会回到0列的.AT命令要求这样.

 

ctrl_Z   是Ctrl   +   Z(按下Ctrl键的时候同时按下Z键),输出^Z   
  就是空或者结束的意思,当然了也可以转化成条件的false

 

 

还有复杂一点的解释

 

首先,你的while形式是do   while的,这样会造成无论如何,多读了一个字符,接下来p++,导致了最终的*p是没有存放任何字符的,真正的内容应该在*(p-2)的地方存放。   
    
  下面就牵涉到0x1a的问题了,某些C源文件编辑器会在每个C文件最后加入一个0x1a做标记(典型的就是tc2),而上面的代码就是检测这种情况,并且如果有0x1a作为标记的话,说明已经读到了文件的结尾,0x1a对我们的程序来说没有意义,所以把它改成'/0',但是如果是i<PROG_SIZE失败而导致的退出循环,则p-2这个位置的字符是有意义的,显然后来多读取的那个字符是没有用的,所以把p-1这个位置的字符置'/0',这样保证了返回的时候,返回的的确是一个字符串。   
    
  总结一下,0x1a是检测某些编辑器给文件强加的结束标志的(但是这个强制的标志并不是所有的编辑器都有,譬如VC++的编辑器就没有这个标志)。

原创粉丝点击