首页

文章

C语言是如何用16点阵方法输出汉字的?

发布网友 发布时间:2022-04-19 09:59

我来回答

4个回答

热心网友 时间:2023-07-16 07:11

到目前为止,我们编写的C 程序,其用于人机交互的提示或菜单都是英文
的,那么如何在没有汉化的Turbo C 集成开发环境下编制显示汉字的程序呢?

解决这一编程问题,我们首先必须了解有关汉字编码及字库的知识。根据对汉字使
用频率的研究,可把汉字分成高频字(约100 个),常用字(约3000 个),次常用字(约4000 个),
罕见字(约8000 个)和死字(约45000 个),即正常使用的汉字达15000 个。我国1981 年公布
了《通讯用汉字字符集(基本集)及其交换码标准》GB2312-80 方案,把高频字、常用字、和
次常用字集合成汉字基本字符集(共6763 个),在该集中按汉字使用的频度,又将其分为一
级汉字3755 个(按拼音排序)、二级汉字3008 个(按部首排序),再加上西文字母、数字、图
形符号等700 个。

汉字编码:

区位码

国家标准的汉字字符集(GB2312—80)在汉字操作系统中是以汉字库的形式提供的。汉
字库结构作了统一规定,即将字库分成94 个区,每个区有94 个汉字(以
位作区别)每一个汉字在汉字库中有确定的区和位编号(用两个字节),这就是所谓的区位码
(区位码的第一个字节表示区号,第二个字节表示位号,因而只要知道了区位码,就可知道
该汉字在字库中的地址,每个汉字在字库中是以点阵字模形式存储的,如一般采用16×16
点阵形式,每个点用一个二进位表示,存1 的点,当显示时,可以在屏上显示一个亮点,存
0 的点,则在屏上不显示,这样把存某字的16×16 点阵信息直接用来在显示器上按上述原
则显示,则将出现对应的汉字。

内码
汉字使用两字节表示,国家制定了统一标准,称为国标码。国标码规定,每个字节使用
后面7 位,第一位为0。为了区别于英文的ASCII 码,国标码在计算机上使用的时候,规定
汉字每个字节第一位设置为1,以表示该两字节为汉字,称为内码。以“大”字为例子:
国标码3473H: 0 0 1 1 0 1 0 0 0 1 1 1 0 0 1 1
内码B4F3H: 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1
国标码与内码有一定的转换公式,即16 进制的区位码,两个字节各加80H,就成为了
国标码。
汉字字模在字库中存放的位置根据汉字的区位码来确定,内码是汉字在机内的表示。由
于区位码和内码存在固定的转换关系,所以当在支持汉字输入的系统中,键盘输入的汉字内
码即在程序中存在,将其转换为区位码,再从字库中找到对应的汉字字模,然后再用有关的
位操作和循环语句,对每个字节的每一位进行判断,如同过滤一样,如果某位是1,则按设
置的颜色在屏幕的相应位置画点(用graphics.h 中的显示象素点的函数putpixel()),若某位
为0,则不画点,这样就可按预先设置的颜色在相应位置显示出该汉字来。

内码到区位码的转换
若汉字内码为十六进制数h2h1l2l1,则区号qh 相位号wh 分别为:
qh= h2h1-0xa0;
wh= l2l1-0xa0;
若用十进制表示内码为dld2,则
qh=dl-l60;
wh=d2-160;
即区位码qw 为:
qw=100*(d1-160)十(d2-160);
反过来,若已经知道了区位码qw。则也可求得区号和位号:
qh=qw/100;
wh=qw-100*qh;
因而该汉字在汉字库中离起点的偏移位置(以字节为单位),可计算为:
offset=(94*(qh-1)+(wh-1))* 32;
注意:字库中每1 区有94 个字符。
这样,就可以找寻到文件的偏移量,读出一个char bytes[32]数组。这样bytes 数组中则
存了要显示汉字的16×16 点阵字模,然后将字模按行扫描的办法,通过循环用putpixel()函
数在屏幕设定位置显示出象点,因而组合成一个显示的汉字。

热心网友 时间:2023-07-16 07:11

C语言中,汉字是储存在汉字库里的。每个汉字在字库中以点阵字模形式存储,一般采用16×16点阵形式,每个点用一个二进位表示,存1的点,当显示时,可以在屏上显示一个亮点,存0的点,则在屏上不显示,这样把存某字的16×16点阵信息直接用来在显示器上,按上述原则显示,则将出现对应的汉字

当用存储单元存储该字模信息时,将需32个字节地址,汉字字模在字库中存放的位置根据汉字的区位码来确定,确定了区位码后,再从字库中找到对应的汉字字模,然后再用有关的位操作和循环语句,对每个字节的每一位进行判断,如同过滤一样,如果某位是1,则按设置的颜色在屏幕的相应位置画点(比如用graphics.h中的显示象素点的函数putpixel()),若某位为0,则不画点,这样就可按预先设置的颜色在相应位置显示出该汉字来。

热心网友 时间:2023-07-16 07:12

MFC 用 TextOutW(....) 输出汉字,当然,预先在DC里定义了中文font. 至于是bitmap font 还是 TTF font 无关紧要,TextOutW 自己会处理。

如果自己写一个16x16 点阵,那你就“画”点子好了,计算点的座标,放大缩小点阵,确定某位置画点还是保留背景色。

-----------------------------------------
MFC 画字程序:
(1)建新工程 MFC 应用程序
(2)选用 建单个窗,默认支持 Doc-View
(3)产生程序
(4)进View.h 头文件,加入变量声明:
CFont font, *oldfont;
(5)进View.cpp文件,在OnDraw() 里加入...
下面是完整的OnDraw程序:
void COne_letterView::OnDraw(CDC* pDC)
{
COne_letterDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CString aStr;
wchar_t str[] ={0x8fd9,0x662f,0xff35,0xff2e,0xff29,0xff23,0xff2f,0xff24,0xff25, 0x56fd,0x6807,0x7801};
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = 60;
lf.lfWidth = 30;
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfWeight = 520;
lf.lfItalic = 0;
lf.lfUnderline = 0;
lf.lfStrikeOut = 0;
lf.lfCharSet = GB2312_CHARSET;
lf.lfOutPrecision = 0;
lf.lfClipPrecision = CLIP_STROKE_PRECIS;
lf.lfQuality = 0;
lf.lfPitchAndFamily = 0;
strcpy(lf.lfFaceName, "MS Song");
font.CreateFontIndirect(&lf);
oldfont = pDC->SelectObject(&font);
TextOutW(pDC->m_hDC, 50, 100, str, 12);
}
好了。编译,运行。你可以看到大大的中文字:
“这是UNICODE国标码”
简单吧!

热心网友 时间:2023-07-16 07:12

我们做手机,经常做这个,显示16点阵的汉字

其实这个跟c语言,没有多大关系,不过我们的手机软件的开发,全部用的都是c

16点阵的数据,通常是16行,16列的,每个点,用1个bit位表示
通常0表示白,即不用描点,1表示黑,需要在此处描个点

因此,用两个for循环,就能把一个16点阵的字符给绘制出来

到底如何绘制,要看显示设备了,我们用的是LCD
不同的设备,会有不同的驱动,也会有不同的描点函数的
ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 数学中的Sin和Cos是什么意思 对于一个24*24的汉字点阵来说,一个汉字所占存储量为几个字节? PS:什么是点阵?这道题要怎么算? 数学cos tan sin公式是什么? 基于单片机原理的16×16LED点阵字符显示屏汉字转换 数学cos公式是什么? 404 Not Found 数学三角函数cos的公式有哪些? 自造字的点阵字与描边字 数学中cos是什么意思? 在CAD里如何把文字变成点阵或线条? cos在数学中是什么意思 404 Not Found 数学中cos是什么意思 如何在word等软件中使用点阵字体? AI怎么转曲点阵字体 单片机8乘8led点阵上的字怎样90度旋转 如何将点阵图中的字转为矢量图 求助汉字转换点阵编程 如何将PDF里的点阵字体转换成word文档格式? 用电池的热水器怎么烧热水 关于计算机点阵与汉字 数学中符号cos和sin是什么意思 轮廓字形与点阵字形的区别是什么? 什么是cos?(数学) 【数学】sin cos tan分别是什么意思 404 Not Found 数学sin、cos是什么意思? 怎么让LED点阵显示汉字 数学里用sin、cos、tan求度数怎么求? 字体用PS怎么处理能变成发票点阵字体 cos在数学中表示什么 linux C语言实现把字符串转点阵图(非点阵字) 为什么微信小视频打不开 cos怎么读, cos数学怎么读 数学中cos sin cos 分别是什么 sin,cos,cot,tan在数学里什么意思?? 社保需要交多少年 社保要交多少年? 社保要交多少年
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com