ziv2077 2021-10-19 20:00 采纳率: 0%
浏览 43
已结题

编程实现汉字点阵显示,只能够显示一个汉字,怎么修改代码做到显示三个汉字?

代码如下


#include "stdio.h"
#include "string.h"
#include "stdlib.h"

const int reglen = 94;       //每区(行)有 94 位(列)
const int font_width  = 48;  // 单字点阵宽度(列数)
const int font_height = 48;  // 单字点阵高度(行数)
const int dotsize = 16 * 16/8;   //一个汉字点阵所占的字节数
const int subcode = 0xa0;      //内码与区、位码的差值

char *font_file_name = "chs16.fon"; // 点阵字库文件名
char str[] = "计";    //要显示点阵信息的汉字
char bindot[16 * 16/8] = {0};   //存储点阵信息的数组

void printcharbindot(char* bindot, int dotlen);
int main(int argc, char* argv[])
{
    FILE *fp = fopen(font_file_name, "rb");
    int string_size = font_width * font_height;


    int i=0,j=0;
       int offset=0;
    unsigned char regcode;  //区码
    unsigned char bitcode;  //位码 

    // 计算区位码,
    regcode = (unsigned char)str[i]-subcode;
    bitcode = (unsigned char)str[i+1]-subcode;
// 
//    再计算汉字在字库中的位置,进而得出此字符点阵在字体文件中的偏移

    offset=((regcode-1)*reglen+bitcode-1)*dotsize;
    
    // 在字库文件中读取其点阵数据
    fseek(fp, offset, SEEK_SET);
    fread(bindot, sizeof(bindot),1, fp);
    
    //输出其点阵信息
    printcharbindot(bindot, dotsize);
    
    fclose(fp);
    system("pause");
    return 0;
}

//按顺序输出点阵的每一位信息
void printcharbindot(char* bindot, int len)
{
    int charnum = 0;  //当前字节号
    int bitnum  = 0;  //已读取的位数
    int bitindex =0;  //当前位号
    int bitvalue;     //当前位的值
    for (charnum =0; charnum < len; ++charnum)
    {
        //从高到低顺次输出一个字节的每位信息
        for(bitindex = 7;bitindex>=0; --bitindex)
        {
            //输出当前字节第bitindex位的值
            bitvalue  = ((bindot[charnum]>>bitindex) & 0x1 );  
            printf("%c", bitvalue+'0');

            //满12位输出一行
            if ((++bitnum %16) == 0)
                printf("\n");
        }
    }
}
  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-10-21 10:29
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 创建了问题 10月19日

悬赏问题

  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?