ASCII 非打印字符

摘要:
定义经济应用程序的入口点。//#include“stdafx.h”#include<ddd“;staticchar*NoPrinttoQuestionMark(char*src){char*p=src;sizeof(dest));char*q=dest;intdst_len=sizeof(dest);dst_len>

项目出了问题,因为AscII非打印字符的原因,后来找了一下啊ASCII的非打印字符,总共有31个,然后我们直接全部替换成问号了.

解决方式为先找到非打印字符,这是我从网上找的非打印字符表:

进制十六进制字符 十进制十六进制字符
000 1610数据链路转意
101头标开始 1711设备控制 1
202正文开始 1812设备控制 2
303正文结束 1913设备控制 3
404传输结束 2014设备控制 4
505查询 2115反确认
606确认 2216同步空闲
707震铃 2317传输块结束
808backspace 2418取消
909水平制表符 2519媒体结束
100A换行/新行 261A替换
110B竖直制表符 271B转意
120C换页/新页 281C文件分隔符
130D回车 291D组分隔符
140E移出 301E记录分隔符
150F移入 311F单元分隔符

当碰到这样的打印字符的时候,替换成问号?

程序为:

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

知道了他们的ascII码之后,可以将原先在字符串中的非打印字符用问号?过滤 

函数为

// 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("--原先--
%s,size=%d
",abc,strlen(abc)); 
    
    abc=NoPrinttoQuestionMark(abc); 
    printf("--替换完之后--
%s,size=%d
",abc,strlen(abc));      
    return 0;
}

当然 看到这段代码之后我们发现两个问题

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

在这个循环体中,有一个

if(*p >0x1F) 假如我们希望,将制表符,回车,换行,单元分割符过滤掉的话,应当改成:

   if(*p >=0x1F|| *p == 0x0a||*p==0x0D||*p==0x09)
(2) dst_len > 2 的原因是说 C 语言规定最后一个字符一定是'

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第三课:部署Coredns服务Excel表格导入Mysql数据库,一行存入多条数据的前后台完整实现思路(使用mybatis框架)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

shell 正则表达式与文件名匹配

1) . : 匹配任意单ASCII 字符,可以为字母,或为数字。 2) 举例: ..XC..匹配deXC1t、23XCdf 等,.w..w..w.匹配rwxrw-rw-行首以^匹配字符串或字符序列 1) ^ : 允许在一行的开始匹配字符或单词。 2) 举例: ^.01 匹配0011cx4、c01sdf 等,^d 匹配drwxr-xr-x、drw-r--r-...

svn 回退/更新/取消至某个版本命令详解

1. 取消Add/Delete 取消文件 svn revert 文件名 取消目录 svn revert --depth=infinity 目录名 2. 回退版本 方法1: 用svn merge 1) 先 svn up,保证更新到最新的版本,如20; 2) 然后用 svn log ,查看历史修改,找出要恢复的版本,如10 。如果想要更详细的了解情况,可以使用...

web_reg_save_param_ex简介

Save Offset 设置关联的内容偏移量,从第几位开始进行关联操作。回到最开始的例子,我们抓取的是You have successfully installed XAMPP on this system!,如果需要获得successfully installed XAMPP on this system!这个字符串,则不用改变左边界,只需要设置Sav...

C#中去除String中的空格

第一种 Trim string中自带的方法Trim,可以去除行首行尾的空格,或将某一字符删除。如: var str = text.Trim(); 第二种 Regex类(正则表达式) 下面为转发 源地址:http://www.cnblogs.com/dudu/archive/2011/09/17/2179423.html 1. 匹配中文(全角)空格 Re...

SweetAlert2 弹窗

<!DOCTYPE html>   <html>          <head>           <meta charset="utf-8">           <title>SweetAlert2</title>           <meta name="vi...

wpf简单进度条

UserControl x:Class="WpfApplication1.UserControl2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:...