精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>编码解码>>请教汉字和ASCII码同时读取的c代码

主题:请教汉字和ASCII码同时读取的c代码
发信人: proust()
整理人: wenbobo(2002-12-27 15:50:04), 站内信件
各位高手,请教在BORLANDC C++3.1中如何同时读取汉字与ASC码?
最好有源程序。
例如:如何读取“你好1998,希望”
请发:[email protected]

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 203.93.7.52]
发信人: xiaomiao (楚狂人), 信区: C
标  题: Re: 请教汉字与ASC码同时读取的C语言程序
发信站: 网易虚拟社区 (Thu Jul 15 10:29:11 1999), 站内信件

【 在 proust (proust) 的大作中提到: 】
: 各位高手,请教在BORLANDC C++3.1中如何同时读取汉字与ASC码?
: 最好有源程序。
: 例如:如何读取“你好1998,希望”
: 请发:[email protected]
:    .......
给你一个老程序,在BC++3.1下调试通过,要用到UCDOS的16点阵字库
HZK16.不过为了速度,最好用直接写屏的算法.

/* Display Chinese string in BGI mode */
/* Using the UCDOS HZK16 Chinese character library */

#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

int outxyhz(int x,int y,char *p,int color);
int disp_hz(int left,int top,unsigned char byte1,
     unsigned char byte2,int color);

void main()
{
  int gdrive=VGA,gmode=VGAHI;
  initgraph(&gdrive,&gmode,"\\bc31\\bgi");
  setbkcolor(BLUE);
  cleardevice();
  outxyhz(200,100,"计算机软件开发",WHITE);
  outxyhz(100,164,"Press any key to exit!(按任意键退出)",LIGHTRED);
  outxyhz(100,200,"程序设计 XiaoMiao 1996.9. All rights not reserved."
,YELLOW);
  outxyhz(100,225,"Please distribute this program freely.",CYAN);
  getch();
  closegraph();
}
/* function to show a text string with Chinese and English */
int outxyhz(int x,int y,char *p,int color)
{
  int oldcolor;
  char q[2];
  oldcolor=getcolor();  /* keep the current color setting */
  setcolor(color);
  while(*p)
   {
     if(((unsigned char)*p>=0xa1&&(unsigned char)*p<=0xfe)
&&((unsigned char)*(p+1)>=0xa1&&(unsigned char)*(p+1)<=0xfe))
{
if((x+16-1)>getmaxx()||(y+16-1)>getmaxy())
  return 0;
disp_hz(x,y,*p,*(p+1),color);
p+=2;
x+=16+2;
      }
     else
      {
moveto(x,y);
*q=*p;
*(q+1)='\0';
settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
outtextxy(x,y+4,q);
x+=8+1;
p++;
      }
   }
   setcolor(oldcolor);
   return 1;
}

/* function to display a chinese character; Using HZK16 in UCDOS */
int disp_hz(int left,int top,unsigned char byte1,
     unsigned char byte2,int color)
{
  FILE *fp;
  unsigned char buf[32];
  unsigned char mark;
  long p;
  int x,y,i,j;
//  int quma,weima;

  fp=fopen("c:\\ucdos\\hzk16","rb");  // Using UCDOS 16*16 LIB
  if(fp==NULL)
   {
     closegraph();
     puts("Cannot open HZK16 file!\n");
     exit(1);
   }
  if((byte1>=0xa1&&byte1<=0xfe)
&&(byte2>=0xa1&&byte2<=0xfe))
{
// quma=byte1-0xa0;
// weima=byte2-0xa0;
p=(byte1-0xa1)*94+byte2-0xa1;
p*=32;
fseek(fp,(long)p,SEEK_SET);
fread(buf,sizeof(unsigned char),32,fp);
for(i=0,y=top;i<32;i+=2,y++)
for(mark=0x80,j=0;mark>0;mark=mark>>1,j++)
       {
if((buf[i]&mark)!=0)
 putpixel(left+j,y,color);
if((buf[i+1]&mark)!=0)
 putpixel(left+j+8,y,color);
       }
  }
  fclose(fp);
  return 1;
}










--
Life it seems to fade away,
Drifting further every day...
---我本楚狂人,凤歌笑孔丘---

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.100.243]
发信人: undir (z), 信区: C
标  题: Re: 请教汉字与ASC码同时读取的C语言程序
发信站: 网易虚拟社区 (Thu Jul 15 10:31:08 1999), 站内信件

【 在 proust (proust) 的大作中提到: 】
: 各位高手,请教在BORLANDC C++3.1中如何同时读取汉字与ASC码?
: 最好有源程序。
: 例如:如何读取“你好1998,希望”
: 请发:[email protected]
:    .......
  又汉字特点可知其所对应的ASCII大于128
   故可判断:
     例判断一行有几个汉字:
     void main()
      {
          char c;int total(0);
          cout<<"please input a line"<<endl;
do
{
cint>>c;
             if(chr(c)>128)
               { cint>>c;
                if(chr(c)>128) //因为汉字为双字节故要判断两位
                 total++;
                }
           while(c==null);
           cout<<\n"其中汉字为"<<total<<"个"<<endl;
}
//此程序需要汉字系统支持
bye------------------
[email protected]


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.168.157]

[关闭][返回]