ASCII 非打印字符

項目出了問題,由於AscII非打印字符的緣由,後來找了一下啊ASCII的非打印字符,總共有31個,而後咱們直接所有替換成問號了.app

解決方式爲先找到非打印字符,這是我從網上找的非打印字符表:函數

進制 十六進制 字符   十進制 十六進制 字符
0 00   16 10 數據鏈路轉意
1 01 頭標開始   17 11 設備控制 1
2 02 正文開始   18 12 設備控制 2
3 03 正文結束   19 13 設備控制 3
4 04 傳輸結束   20 14 設備控制 4
5 05 查詢   21 15 反確認
6 06 確認   22 16 同步空閒
7 07 震鈴   23 17 傳輸塊結束
8 08 backspace   24 18 取消
9 09 水平製表符   25 19 媒體結束
10 0A 換行/新行   26 1A 替換
11 0B 豎直製表符   27 1B 轉意
12 0C 換頁/新頁   28 1C 文件分隔符
13 0D 回車   29 1D 組分隔符
14 0E 移出   30 1E 記錄分隔符
15 0F 移入   31 1F 單元分隔符

當碰到這樣的打印字符的時候,替換成問號?spa

程序爲:.net

 

博客地址:http://blog.csdn.net/dlxuemin/article/details/1576975code

知道了他們的ascII碼以後,能夠將原先在字符串中的非打印字符用問號?過濾 blog

函數爲字符串

// yyy.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include <stdio.h>
#include<stdlib.h>
#include <string.h>    
#include <malloc.h>  
#define MAX_MESSAGE_LENGTH 1000
char matchStr1[]="111,aaa,ddd";  
 static char * NoPrinttoQuestionMark(char *src)
 {
     char *p = src;
     char dest[MAX_MESSAGE_LENGTH + 1024];
     memset(dest,0,sizeof(dest));
     char *q = dest;
     int dst_len = sizeof (dest);
             while(0 != *p && dst_len > 2)
             {
                 if(*p >0x1F)
                 {
                     *q++ = *p++;
                 } else {
                         *q++ = '?';
                         p++;
                 }
                 dst_len--;
             }
             *q = 0;
  return dest;
 }  
 
int main(int argc, char* argv[])
{

    char * abc="333 333 aaa aaa ddd 444 aaa 666"; 
    printf("--原先--\n%s,size=%d\n",abc,strlen(abc)); 
    
    abc=NoPrinttoQuestionMark(abc); 
    printf("--替換完以後--\n%s,size=%d\n",abc,strlen(abc));      
    return 0;
}

固然 看到這段代碼以後咱們發現兩個問題同步

(1):while(0 != *p && dst_len > 1)博客

在這個循環體中,有一個string

if(*p >0x1F) 假如咱們但願,將製表符,回車,換行,單元分割符過濾掉的話,應當改爲:

   if(*p >=0x1F|| *p == 0x0a||*p==0x0D||*p==0x09)
(2) dst_len > 2 的緣由是說 C 語言規定最後一個字符必定是'\0' 最後一個不用替換的,倒數第二個假如替換的話,要++,這樣就超出了限制,直接不替換了.

 

ASCII 打印字符表 

十進制 十六進制 字符   十進制 十六進制 字符
32 20 space   80 50 P
33 21 !   81 51 Q
34 22 "   82 52 R
35 23 #   83 53 S
36 24 $   84 54 T
37 25 %   85 55 U
38 26 &   86 56 V
39 27 '   87 57 w
40 28 (   88 58 X
41 29 )   89 59 Y
42 2A *   90 5A Z
43 2B +   91 5B [
44 2C ,   92 5C /
45 2D -   93 5D ]
46 2E .   94 5E ^
47 2F /   95 5F _
48 30 0   96 60 `
49 31 1   97 61 a
50 32 2   98 62 b
51 33 3   99 63 c
52 34 4   100 64 d
53 35 5   101 65 e
54 36 6   102 66 f
55 37 7   103 67 g
56 38 8   104 68 h
57 39 9   105 69 i
58 3A :   106 6A j
59 3B ;   107 6B k
60 3C <   108 6C l
61 3D =   109 6D m
62 3E >   110 6E n
63 3F ?   111 6F o
64 40 @   112 70 p
65 41 A   113 71 q
66 42 B   114 72 r
67 43 C   115 73 s
68 44 D   116 74 t
69 45 E   117 75 u
70 46 F   118 76 v
71 47 G   119 77 w
72 48 H   120 78 x
73 49 I   121 79 y
74 4A J   122 7A z
75 4B K   123 7B {
76 4C L   124 7C |
77 4D M   125 7D }
78 4E N   126 7E ~
79 4F O   127 7F DEL
相關文章
相關標籤/搜索