zoukankan      html  css  js  c++  java
  • shell编程/字库裁剪(3)——验证

      版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址
    
      http://www.cnblogs.com/Colin-Cai/p/7712496.html 
    
      作者:窗户
    
      QQ:6679072
    
      E-mail:6679072@qq.com
    

      程序写完了,必须要验证,这是重要的方法论。因为如果不验证,则不会知道程序写的对还是不对。学过人工智能或者控制论都知道,反馈非常重要,反馈形成闭环,可以用来指导、调节你的输出。而对于编程这个活动来说,验证也一样是产出的反馈,形成闭环,过程中测出的所有BUG都会反馈过来,产生调整代码的输出。

      一句话,闭环靠谱,开路不靠谱。

      我们生成了生成字库的程序之后,按理也应该验证。C语言的程序,没有main函数,自然也需要另外一个C语言带main函数的调用来验证了。我们这里就把选取使用字的文本根据给出的裁剪字库打印出来即可。用终端模拟一样可以有挺好的效果,没必要控制显示器。

      我们写的C语言文件如下,给出了汉字(16X16)的打印,以及ASCII字符(16X8)的打印。

    #include <stdio.h>
    
    /* http://www.cnblogs.com/Colin-Cai */
    
    //打印汉字
    void print_chinese(const unsigned char *buf)
    {
            int i,j,k;
            unsigned char c;
    
            for(i=0;i<16;i++) {
                    for(j=0;j<2;j++) {
                            for(k=7;k>=0;k--) {
                                    c = (unsigned char)0X1 << k;
                                    if(*buf & c)
                                            printf("*");
                                    else
                                            printf(" ");
                            }
                            buf++;
                    }
                    printf("
    ");
            }
    
            printf("
    
    
    ");
    }
    
    //打印ASCII字符
    void print_ascii(const unsigned char *buf)
    {
            int i,j,k;
            unsigned char c;
    
            for(i=0;i<16;i++) {
                    for(j=0;j<1;j++) {
                            for(k=7;k>=0;k--) {
                                    c = (unsigned char)0X1 << k;
                                    if(*buf & c)
                                            printf("*");
                                    else
                                            printf(" ");
                            }
                            buf++;
                    }
                    printf("
    ");
            }
    
            printf("
    
    
    ");
    }
    
    /* 裁剪中提供的两个查找函数 */
    const unsigned char *find_ascii_font(unsigned char c);
    const unsigned char *find_chinese_font(unsigned char GBH, unsigned char GBL);
    int main(int argc, char*argv)
    {
            unsigned char c, c2;
            const unsigned char* p;
            while(1) {
                    if(fread(&c, 1, 1, stdin)!=1)
                            return 0;
                    if(c<0X80) { /* 就以此判断是ASCII字符了 */
                            p = find_ascii_font(c);
                            if(p != NULL) {
                                    print_ascii(p);
                            }
                            continue;
                    }
                    if(fread(&c2, 1, 1, stdin)!=1)
                            return 0;
                    /*  打印汉字 */
                    p = find_chinese_font(c,c2);
                    if(p != NULL) {
                            print_chinese(p);
                    }
            }
            return 0;
    }

      测试一下效果

  • 相关阅读:
    3.30一周拾遗
    3.25周 一周拾遗
    自动加载以及Composer的实现
    MySQL 事务处理
    PHP代码实现3 [函数角度]
    PHP代码实现2 [从变量和数据的角度] 1
    PHP代码实现2 [从变量和数据的角度] 2
    vue 报错: [Vue warn]: Error in nextTick: "RangeError: Maximum call stack size exceeded" 很可能是你的name错了
    vue电商开发记录1—实现电商图片放大镜,移入放大效果
    vue图片点击放大预览v-viewer
  • 原文地址:https://www.cnblogs.com/Colin-Cai/p/7712496.html
Copyright © 2011-2022 走看看