
2、n小地毯; 垫子; (体育运动用的)厚垫子; (装饰或保护桌面的)衬垫,小垫;
3、v缠结成一团; 缠结;
4、adj无光泽的暗淡的; 具有粗糙表面的;
5、[例句]Wipe your feet on the mat before you come in, please请在垫子上擦擦脚再进来。
matlab保存和读取mat文件数据:
1、打开matlab,在命令行窗口中输入a=[1 2 3 4 5 6],按回车键之后,输入save a,将a变量保存在新生成的amat文件。
2、在文件夹中,可以看到新生成的amat文件。
3、使用“load a”,读取amat文件数据,读取之后,就可以直接使用mat文件里面的a变量。
4、如果我们想保存多个变量到mat文件中,可以通过save('datamat','a','b')的方式,datamat是生成的mat文件名,a和b是存入的变量。
5、第五步使用load('datamat')读取mat文件,读取之后,可以直接使用a和b变量。
你如果用TC#include<graphicsh>
#include<stdlibh>
#define N 200
#define up 0x4800
#define down 0x5000
#define left 0x4b00
#define right 0x4d00
#define esc 0x011b
#define Y 0x1579
#define n 0x316e
int gamespeed; / 游戏速度 /
int i,key,color;
int score=0; / 游戏分数 /
char cai48H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x00,0x18,0x00,0x00,0x00,0x0E,0x00,
0x1C,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,
0x00,0x00,0x20,0x00,0x38,0x00,0x00,0x00,
0x40,0x00,0x78,0x00,0x00,0x01,0x80,0x40,
0x70,0x00,0x00,0x03,0x80,0xC0,0xE0,0x00,
0x00,0x07,0x80,0x80,0xC0,0x00,0x00,0x0E,
0x11,0x81,0xC0,0x00,0x00,0x08,0x61,0x01,
0x80,0x00,0x00,0x00,0x23,0x03,0x04,0x00,
0x00,0x02,0x02,0x00,0x06,0x00,0x00,0x1E,
0x04,0x00,0x0F,0x00,0x00,0x1C,0x1F,0x80,
0x1E,0x00,0x00,0x08,0x3F,0x80,0x3C,0x00,
0x00,0x00,0xFF,0x80,0x38,0x00,0x00,0x03,
0xFF,0x80,0x78,0x00,0x00,0x0F,0xF8,0x00,
0xF0,0x00,0x00,0x7F,0xF0,0x00,0xE0,0x00,
0x03,0xFF,0xFC,0x01,0x80,0x00,0x03,0xC0,
0xFF,0x01,0x03,0x80,0x01,0x01,0xFF,0x00,
0x03,0x80,0x00,0x01,0x3F,0x00,0x07,0x80,
0x00,0x02,0x11,0x00,0x07,0x00,0x00,0x00,
0x10,0x00,0x07,0x00,0x00,0x00,0x10,0x00,
0x0E,0x00,0x00,0x08,0x10,0x00,0x1C,0x00,
0x00,0x30,0x10,0x00,0x18,0x00,0x00,0x70,
0x10,0x00,0x30,0x00,0x01,0xE0,0x10,0x00,
0x70,0x00,0x03,0x80,0x10,0x00,0x60,0x00,
0x00,0x00,0x30,0x00,0xE0,0x00,0x00,0x00,
0xF0,0x01,0xC0,0x00,0x00,0x00,0x70,0x03,
0xC0,0x00,0x00,0x00,0x10,0x07,0x80,0x00,
0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,
0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x3C,
0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,
0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char she48H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,
0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,
0x00,0x0E,0x00,0x00,0x00,0x03,0x00,0x07,
0x00,0x00,0x00,0x02,0x00,0x03,0x00,0x00,
0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x02,
0x00,0x00,0xF8,0x00,0x00,0x02,0x00,0x07,
0x86,0x00,0x00,0x02,0x00,0x18,0x03,0x00,
0x00,0x02,0x00,0x00,0x07,0x80,0x00,0x03,
0xF0,0x00,0x07,0x80,0x00,0x0F,0xFC,0x00,
0x0C,0x00,0x00,0x7E,0x3F,0x80,0x00,0x00,
0x01,0xFE,0x1F,0x80,0x00,0x00,0x01,0xE2,
0x39,0x8C,0x00,0x00,0x00,0xC2,0x30,0x08,
0x00,0x00,0x00,0xC2,0x60,0x08,0x00,0x00,
0x00,0xC3,0xE0,0x08,0x60,0x00,0x00,0x7F,
0xE0,0x01,0xE0,0x00,0x00,0x3F,0x80,0x1F,
0xE0,0x00,0x00,0x1E,0x00,0x1F,0x80,0x00,
0x00,0x1E,0x00,0x1F,0x00,0x00,0x00,0x02,
0x38,0x1E,0x00,0x00,0x00,0x07,0xFC,0x1C,
0x00,0x20,0x00,0x07,0xFC,0x18,0x00,0x20,
0x00,0x1F,0x0C,0x10,0x00,0x20,0x00,0x7C,
0x04,0x10,0x00,0x60,0x01,0xF0,0x00,0x10,
0x00,0x60,0x01,0xE0,0x00,0x08,0x00,0xF0,
0x00,0x80,0x00,0x08,0x03,0xF0,0x00,0x00,
0x00,0x07,0xFF,0xF0,0x00,0x00,0x00,0x07,
0xFF,0xF0,0x00,0x00,0x00,0x03,0xFF,0xE0,
0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char tun48H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x3E,
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,
0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,
0x03,0xC0,0x00,0x00,0x00,0x00,0x1F,0x00,
0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,
0x00,0x01,0xF8,0x00,0x00,0x00,0x00,0x03,
0xF8,0x00,0x40,0x00,0x00,0x00,0x06,0x07,
0xC0,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,
0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,
0x0F,0xFF,0x80,0x00,0x00,0x00,0x7F,0xF8,
0x00,0x00,0x00,0x1F,0xFF,0xF8,0x00,0x00,
0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x1F,
0xFC,0x3C,0x00,0x00,0x00,0x0F,0xF8,0x0E,
0x00,0x00,0x00,0x04,0x70,0x07,0x00,0x00,
0x00,0x00,0x60,0x03,0x80,0x00,0x00,0x00,
0xC0,0x00,0xC0,0x00,0x00,0x01,0x80,0x00,
0x30,0x00,0x00,0x01,0x00,0x3C,0x18,0x00,
0x00,0x02,0x03,0xFF,0x0C,0x00,0x00,0x0C,
0x7F,0xFF,0x8E,0x00,0x00,0x18,0xFF,0xFF,
0xC7,0x80,0x00,0x78,0xFE,0x07,0x87,0xE0,
0x01,0xF0,0x70,0x07,0x03,0xF8,0x07,0xE0,
0x70,0x0E,0x03,0xFE,0x00,0x00,0x38,0x1E,
0x01,0xFE,0x00,0x00,0x3F,0xFE,0x00,0x0C,
0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,
0x1F,0xFE,0x00,0x00,0x00,0x00,0x0F,0xFE,
0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char dan48H[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFC,0x00,0x00,0x00,0x00,0x07,0xFF,
0x00,0x00,0x00,0x00,0x7F,0xC0,0x80,0x00,
0x00,0x03,0xFF,0x80,0x40,0x00,0x00,0x01,
0xF1,0x80,0x40,0x00,0x00,0x01,0x81,0x80,
0xE0,0x00,0x00,0x00,0x01,0x93,0xF0,0x00,
0x00,0x00,0x01,0xFF,0xF0,0x00,0x00,0x00,
0x21,0xFF,0xF0,0x00,0x00,0x00,0x21,0xF8,
0x00,0x00,0x00,0x00,0x61,0xC0,0x00,0x00,
0x00,0x00,0x61,0x80,0x00,0x00,0x00,0x00,
0xF3,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,
0x00,0x00,0x00,0x01,0xFF,0xC0,0x00,0x00,
0x00,0x03,0xFF,0xF8,0x00,0x00,0x00,0x02,
0x00,0xFC,0x00,0x00,0x00,0x04,0x02,0x1F,
0x00,0x00,0x00,0x08,0x03,0x01,0xC0,0x00,
0x00,0x38,0x03,0x00,0x7C,0x00,0x00,0xF8,
0x07,0xF8,0x3F,0xC0,0x01,0xF0,0x3F,0xFE,
0x3F,0xF8,0x03,0xC1,0xFF,0x0F,0x1F,0xF8,
0x00,0x01,0xE3,0x0F,0x0F,0xF0,0x00,0x01,
0xC3,0x0E,0x00,0x00,0x00,0x01,0x83,0xFC,
0x00,0x00,0x00,0x00,0xC7,0xF8,0x00,0x00,
0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,
0x7F,0xF0,0x00,0x00,0x00,0x00,0x3F,0x03,
0x80,0x00,0x00,0x00,0x03,0x04,0x00,0x00,
0x00,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,
0x1F,0xF8,0x20,0x00,0x00,0x00,0xFF,0xFF,
0xE0,0x00,0x00,0x07,0xFF,0x81,0xE0,0x00,
0x00,0x07,0xE0,0x00,0xE0,0x00,0x00,0x03,
0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
char zuo16H[]={
0x18,0xC0,0x18,0xC0,0x19,0x80,0x31,0xFE,
0x33,0xFE,0x76,0xC0,0xF0,0xFC,0xB0,0xFC,
0x30,0xC0,0x30,0xC0,0x30,0xFE,0x30,0xFE,
0x30,0xC0,0x30,0xC0,0x30,0xC0,0x00,0x00,
};
char zhe16H[]={
0x03,0x00,0x03,0x0C,0x1F,0xCC,0x1F,0xD8,
0x03,0x30,0xFF,0xFE,0xFF,0xFE,0x03,0x00,
0x0F,0xF8,0x3F,0xF8,0xEC,0x18,0xCF,0xF8,
0x0C,0x18,0x0F,0xF8,0x0F,0xF8,0x00,0x00,
};
char tian16H[]={
0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x31,0x8C,
0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x3F,0xFC,
0x31,0x8C,0x31,0x8C,0x31,0x8C,0x3F,0xFC,
0x3F,0xFC,0x30,0x0C,0x00,0x00,0x00,0x00,
};
char xue16H[]={
0x33,0x18,0x19,0x98,0x08,0xB0,0x7F,0xFC,
0x7F,0xFC,0x60,0x0C,0x1F,0xF0,0x1F,0xF0,
0x00,0xC0,0x7F,0xFC,0x7F,0xFC,0x01,0x80,
0x01,0x80,0x07,0x80,0x03,0x00,0x00,0x00,
};
char ke16H[]={
0x00,0x00,0x0C,0x18,0xFD,0x98,0xF8,0xD8,
0x18,0x58,0xFE,0x18,0xFE,0x98,0x18,0xD8,
0x3C,0x58,0x7E,0x1E,0xDB,0xFE,0x9B,0xF8,
0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,
};
struct Food/定义结构体存储食物的属性/
{
int x; / 食物的坐标 /
int y;
int yes; / 值为0表示屏幕上没有食物,值为1表示屏幕上有食物 /
int color; / 食物颜色 /
}food;
struct Snake/定义结构体存储蛇的属性/
{
int x[N]; / 每一节蛇的坐标 /
int y[N];
int color[N];/存储每一节蛇的颜色/
int node; / 蛇的节数 /
int direction; / 蛇移动的方向 /
int life; / 蛇的生命,如果为1,蛇死,游戏结束 /
}snake;
void init(void)/图形驱动/
{
int driver=DETECT,mode=0;
registerbgidriver(EGAVGA_driver);
initgraph(&driver,&mode,"");
}
void drawmat(char mat,int matsize,int x,int y,int color)/汉字点阵/
{
int i,j,k,m;
m=(matsize-1)/8+1;
for(j=0;j<matsize;j++)
for(i=0;i<m;i++)
for(k=0;k<8;k++)
if(mat[jm+i]&(0x80>>k))
putpixel(x+i8+k,y+j,color);
}
void showword(void)
{/ 调用汉字点阵输出程序,显示标题和作者信息 /
drawmat(cai48H,48,249,-4,7);
drawmat(she48H,48,329,-4,7);
drawmat(tun48H,48,409,-4,7);
drawmat(dan48H,48,489,-4,7);
drawmat(cai48H,48,250,-5,4);
drawmat(she48H,48,330,-5,4);
drawmat(tun48H,48,410,-5,4);
drawmat(dan48H,48,490,-5,4);
/作者 田学科/
drawmat(zuo16H,16,515,465,7);
drawmat(zhe16H,16,530,465,7);
drawmat(tian16H,16,550,465,7);
drawmat(xue16H,16,565,465,7);
drawmat(ke16H,16,580,465,7);
}
void draw(void)/画出四周的墙/
{
if(color==15)
color=0;
setcolor(++color);
setlinestyle(SOLID_LINE,0,1);
for(i=30;i<=600;i+=10)
{
rectangle(i,40,i+10,49);
rectangle(i,451,i+10,460);
}
for(i=40;i<450;i+=10)
{
rectangle(30,i,39,i+10);
rectangle(601,i,610,i+10);
}
}
void prscore(void)
{/ 打印游戏分数 /
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,10,200,30);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,15,str);
}
void gameover(void)
{
cleardevice(); / 清屏函数 /
for(i=0;i<snakenode;i++)/ 画出蛇死时的位置 /
{
setcolor(snakecolor[i]);
rectangle(snakex[i],snakey[i],snakex[i]+10,snakey[i]+10);
}
prscore(); / 显示分数 /
draw();
showword();
settextstyle(0,0,6);
setcolor(7);
outtextxy(103,203,"GAME OVER");
setcolor(RED);
outtextxy(100,200,"GAME OVER");
}
void gameplay(void)/ 玩游戏的具体过程 /
{
int flag,flag1;
randomize();
prscore();
gamespeed=50000;
foodyes=0;/ foodyes=0表示屏幕上没有食物 /
snakelife=1;/ snakelife=1表示蛇是活着的 /
snakedirection=4;/ 表示蛇的初始方向为向右 /
snakenode=2; / 蛇的初始化为两节 /
snakecolor[0]=2; /两节蛇头初始化为绿色/
snakecolor[1]=2;
snakex[0]=100;snakey[0]=100;
snakex[1]=110;snakey[1]=100;
foodcolor=random(15)+1;
while(1)
{
while(1)
{
if(foodyes==0) / 如果蛇活着 /
{
while(1)
{
flag=1;
foodyes=1;
foodx=random(56)10+40;
foody=random(40)10+50;
for(i=0;i<snakenode;i++)
{
if(foodx==snakex[i]&&foody==snakey[i])
flag=0;
}
if(flag) break;
}
}
if(foodyes)
{
setcolor(foodcolor);
rectangle(foodx,foody,foodx+10,foody+10);
}
for(i=snakenode-1;i>0;i--)
{
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
switch(snakedirection)
{
case 1: snakey[0]-=10;break;
case 2: snakey[0]+=10;break;
case 3: snakex[0]-=10;break;
case 4: snakex[0]+=10;break;
}
for(i=3;i<snakenode;i++)
{
if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])
{
gameover();
snakelife=0;
break;
}
}
if(snakex[0]<40||snakex[0]>590||snakey[0]<50||snakey[0]>440)
{
gameover();
snakelife=0;
}
if(snakelife==0)
break;
if(snakex[0]==foodx&&snakey[0]==foody)/蛇吃掉食物/
{
setcolor(0);
rectangle(foodx,foody,foodx+10,foody+10);
snakex[snakenode]=-20;
snakey[snakenode]=-20;
snakecolor[snakenode]=foodcolor;
snakenode++;
foodyes=0;
foodcolor=random(15)+1;
score+=10;
prscore();
if(score%100==0&&score!=0)
{
for(i=0;i<snakenode;i++)/ 画出蛇 /
{
setcolor(snakecolor[i]);
rectangle(snakex[i],snakey[i],snakex[i]+10,snakey[i]+10);
}
sound(200);
delay(50000);delay(50000);delay(50000);
delay(50000);delay(50000);delay(50000);
nosound();
gamespeed-=5000;
draw();
}
else
{
sound(500);
delay(500);
nosound();
}
}
for(i=0;i<snakenode;i++)/ 画出蛇 /
{
setcolor(snakecolor[i]);
rectangle(snakex[i],snakey[i],snakex[i]+10,snakey[i]+10);
}
delay(gamespeed);
delay(gamespeed);
flag1=1;
setcolor(0);
rectangle(snakex[snakenode-1],snakey[snakenode-1],
snakex[snakenode-1]+10,snakey[snakenode-1]+10);
if(kbhit()&&flag1==1)/如果没按有效键就重新开始循环/
{
flag1=0;
key=bioskey(0);
if(key==esc)
exit(0);
else if(key==up&&snakedirection!=2)
snakedirection=1;
else if(key==down&&snakedirection!=1)
snakedirection=2;
else if(key==left&&snakedirection!=4)
snakedirection=3;
else if(key==right&&snakedirection!=3)
snakedirection=4;
}
}
if(snakelife==0)/如果蛇死了就退出循环/
break;
}
}
void main(void)
{
while(1)
{
color=0;
init();
cleardevice();
showword();
draw();
gameplay();
setcolor(15);
settextstyle(0,0,2);
outtextxy(200,400,"CONTINUE(Y/N)");
while(1)
{
key=bioskey(0);
if(key==Y||key==n||key==esc)
break;
}
if(key==n||key==esc)
break;
}
closegraph();
}mat文件
如果你的计算机装了office Access
那么
它的默认打开很有可能被更改成Access
手动更改默认打开方式也无效
同时它的扩展名也被隐藏
更改浏览器,让其显示扩展名,也无效
方法
更改注册表
把classes boot下的mat删除(或只删除其下的与Access相关项)
再回到浏览器,指定文件扩展名,新建文件类型,指定其打开方式
这样就OK了
默认打开方式为MATLAB,其扩展名也可显示121 首先我们得将需要打开的mat文件发到一个文件夹目录中(假设文件夹目录名为‘data’),作为我们将要使用的工作目录,
122 然后打开matlab软件,如下 *** 作,点击这个按钮(“浏览文件夹”),添加存有mat文件的data文件夹,导入文件夹;
123 之后通过matlab左停靠的当前文件夹视图,就可以在预览界面查看mat文件的具体数据和内容;又或者是在命令行窗口编码load命令,直接导入数据集
有时候我们在使用matlab进行运算的时候,想保存和读取mat文件数据,怎么 *** 作呢,下面来分享一下方法
开启分步阅读模式
工具材料:
matlab
保存和读取mat文件数据方法
*** 作方法
01
第一步打开matlab,在命令行窗口中输入a=[1 2 3 4 5 6],按回车键之后,输入save a,将a变量保存在新生成的amat文件,如下图所示:
02
第二步按回车键之后,在当前文件夹中,可以看到新生成的amat文件,需要注意的是在保存数据到mat文件中的时候,可以设置mat文件名,保存的变量,保存的路径,如下图所示:
03
第三步使用“load a”,读取amat文件数据,读取之后,就可以直接使用mat文件里面的a变量,如下图所示:
04
第四步如果我们想保存多个变量到mat文件中,可以通过save('datamat','a','b')的方式,datamat是生成的mat文件名,a和b是存入的变量,
05
第五步使用load('datamat')读取mat文件,读取之后,可以直接使用a和b变量分类: 电脑/网络 >> 软件 >> 多媒体软件
问题描述:
我下载了几本教材,dat格式的和MAT格式的。用暴风影音、Media player等各种播放器和记事本、写字板等各种都无法打开!恳请高手赐教,不胜感激!
我想把那几本教材传上来,但是不会。
解析:
mat数据格式是matlab的数据存储的标准格式。
你可以调用matlab的子程序库,用c或fortan调用mat格式的数据。
matopen 打开mat文件
matclose 关闭mat文件
magetfp 取得mat文件的c语言句柄
matGetArray 取得一个数组
具体内容看联机文档 用matlab即可打开 推荐matlab701
有的dat是视频 ,有的是数据文件啊建议你可以去下个 金山影霸 或者 豪杰解霸 播放。。。如果你的dat是数据文件,那就比较麻烦你了,你用常用的工具大开试一试吧。如果该DAT文件没有加密或重新编码的话,直接用记事本打开就可以看了 但是如果DAT文件经过处理,其他人要想正常的调阅里面的文字可能就比较困难了先说明一下:在TC下面显示汉字是比较麻烦的,实在想用,可以用VC。
DOS下的点阵汉字
你是否碰到过用启动盘启动系统后用DIR命令得到一串串莫名其妙的字符?有经验的朋友会告诉你:那是汉字。汉字?你不禁会问:怎么一个我一个也不认识。但那确确实实是汉字,如果你启动UCDOS或其他的汉字系统后,就会看到那是一个个熟悉的汉字。同样是汉字,为什么前后会看到不同的结果?呵呵,其实在电脑硬件中,根本没有汉字这个概念,也没有英文的概念,这铁玩意认识的概念只有——内码。
☆汉字的内码
点头表示什么?是“对”、“YES”,偏偏有的地方表示的意义却恰恰相反。一个动作,有不同的诠释;一个问题,有不同的答案;而一个符号,却有不同的意义,关键在于:你是如何地理解。在电脑中亦如此,所有的数据都是以0和1保存的,按不同的数据 *** 作,可以得到不同的结果。对于显示英文 *** 作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有5000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。不信,你可以用记事本写一C文件:
main()
{
unsigned char s,e="ABcd",c="你好";
clrscr();
printf("English char =");
s=e;
while(s!=0) /C的字符串以0为结束符/
{
printf("%3d,",s);
s++;
}
printf("\nChinease char=");
s=c;
while(s!=0)
{
printf("%3d,",s);
s++;
}
getch();
}
再用TC输入txt打开运行,看见了没有,那些数值即英文和汉字的各字节内码。
☆汉字字模
得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状。在硬件系统内,英文的字模信息一般固化在ROM里,即使在没有进入系统的CMOS里,也可以让你看到英文字符。而在DOS下,中文的字模信息一般记录在汉字库文件HZK16里。
☆汉字库文件
了解字母和汉字是按字模位信息显示的原理后,那如何得到汉字的字模信息呢?难道要我们自己去做?NO。DOS前辈们经过艰辛的努力,将制作好的字模放到了一个个标准的库中以免去后辈的麻烦,这就是点阵字库文件。一般我们使用1616的点阵宋体字库,所谓1616,是每一个汉字在纵、横各16点的区域内显示的。不过后来又有了HZK12、HZK24,HZK32和HZK48字库及黑体、楷体和隶书字库。虽然汉字库种类繁多,但都是按照区位的顺序排列的。前一个字节为该汉字的区号,后一个字节为该字的位号。每一个区记录94个汉字,位号则为该字在该区中的位置。因此,汉字在汉字库中的具体位置计算公式为:94(区号-1)+位号-1。减1是因为数组是以0为开始而区号位号是以1为开始的。这仅为以汉字为单位该汉字在汉字库中的位置,那么,如何得到以字节为单位得到该汉字在汉字库中的位置呢?只需乘上一个汉字字模占用的字节数即可,即:(94(区号-1)+位号-1)一个汉字字模占用字节数,而按每种汉字库的汉字大小不同又会得到不同的结果。以1616点阵字库为例,计算公式则为:(94(区号-1)+(位号-1))32。汉字库文该从该位置起的32字节信息即记录了该字的字模信息。
☆点阵汉字的显示
了解点阵汉字及汉字库的构成原理后,显示汉字就变得简单。以1616点阵字库为例,通常的方法是:将文件工作指针移到需要的汉字字模处、将汉字库文件读入一216数组再用for循环一位位地显示。以使用VGAHI模式显示“我”字为例,程序如下:
#include "graphicsh"
#include "stdioh"
main()
{
int i=VGA,j=VGAHI,k;
unsigned char mat[16][2],chinease[3]="我";
FILE HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
initgraph(&i,&j,"");
i=chinease[0]-0xa0;j=chinease[1]-0xa0; /获得区码与位码/
fseek(HZK,(94(i-1)+(j-1))32l,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i]&(0x80>>k)) /测试为1的位则显示/
putpixel(i8+k,j,WHITE);
getch();
closegraph();
fclose(HZK);
}
怎么样?只要掌握了正确的方法,显示汉字并不复杂。
☆打印字库文件和HZK12
如果你有UCDOS的HZK24S(宋体)、HZK24K(楷体)或HZK24H(黑体),你还可以使用不同字体的大字模汉字了。HZK24系列是2424的点阵字库,每字模占用324字节。如果你按照HZK16的显示方法的话,你会看到呵呵,字被放倒了。这是因为该类字库与一般的汉字库不同,这类大字模汉字库是专供打印的打印字库,为了打印的方便将字模都放倒了,你使用时,只要将字模的位信息纵横转置显示即可。例如你如果定义为mat[24][3]则应该这样输出:
for(i=0;i<24;i++)
for(j=0;j<24;j++)
if((0x80>>i%8)&mat[j][i/8]) /转置显示/
putpixel(j+x,y+i,color);
还有一类字库HZK12,虽然属于标准字库类型,但如果你将它的字模当作1212位计算的话,根本无法正常显示汉字。因为字库设计者为了使用的方便,字摸每行的位数均补齐为8的整数倍,于是实际该字库的位长度是1612,虽然每行都多出了4位,但这4位都是0(不显示),并不影响显示效果。
☆理论差不多了下面是我写的一个实践例子
/
TC下的汉字显示演示程序
LO几又VE 22:58 2005-5-23
将hzk16文件放至TC安装目录下
hzk16文件下载地址
下载字体文件
/
#include <graphicsh>
#include <stdioh>
#define MAXX 640 /屏幕宽度 /
#define MAXY 480 /屏幕高度 /
#define WIDTH 20 /每一汉字宽度/
#define HIGH 20 /每一汉字高度/
int priChi(unsigned char ); /中文打印函数,传入参数:中文数组指针 返回值 -1 异常 0 正常/
int X=0; /全局变量X Y控制中文打印格式/
int Y=0;
int main()
{
char chinese[][60]={/TC编译器不支持长行 所以将中文字符串以二维形式存放/
"我放弃清华计算机专业的保送资格而选择参加高考的消息震撼了全校",
"从校长到班主任到各科目任课老师都找我谈过话我有点惊异他们的变",
"化在我获得全国信息大赛一等奖外加特别奖以前我似乎是个可有可无",
"的人物突然间变的如此的炙手可热我觉得我的大脑前所未有的不够用",
"说起这个特别奖还真的挺有意思虽然叫全国决赛但也无非是出几个笔",
"试题再弄个上机程序编一下限时总共是三小时规定语言是西语言或者",
"派司卡在我花了半个小时分别用两种语言把该程序完成后我觉得坐在",
"那实在是浪费我的大好青春于是我决定用汇编语言把它再写一遍本来",
"我准备用微 *** 作的十六进制码写的但考虑到时间问题只好放弃有人说",
"是金子总会发光此话诚不欺我啊正当我热火朝天全心投入编程的时候",
"却不知道自己已经被某人注意了很久了三小时之后我走出考场之后某",
"人赶紧抓住我很兴奋的叫了一声小朋友这声小朋友直接导致我在数年",
"后还经常从噩梦中惊醒同时也是我拒绝清华邀请的直接导火索我们把",
"话题回到事发现场我在吓了很大一跳后把头转了回来一个瘦干老头正",
"抓着我的手两眼放光的样子还似乎是略带深情的看着我我全身鸡皮疙",
"瘩顿时争先恐后的向外钻我浑身一个机灵赶紧抖手老头似乎感觉到了",
"异样送开我的手略带尴尬的道小朋友我自我介绍一下我是清华大学计",
"算机系的主任受邀到比赛的现场观看顺便看看有没有什么可挖掘的人",
"才那个你明白我的意思吧这句话很是影响清华学生理解力在我心目中",
"的地位你这意思不就是认为我是可挖掘的人才吗我点了点头老头看我",
"能理解显的很兴奋然后开始滔滔不决的向我介绍清华计算机专业的实",
"力如何如何的雄厚在国内甚至国际是如何如何的有影响力最后满怀深",
"情的看了我眼严肃的告诉我他将代表清华计算机专业欢迎我去他们那",
"念书我苦苦忍耐着他的飞溅唾沫委婉的表示这件事非同小可我必须回",
"家和父母商量一下然后逃也似的离开当然第一个去的地方是卫生间我",
"的脸啊谁知道老头的唾沫会不会让我的脸起老年斑回到学校的一个礼",
"拜后我就接到了清华正式邀请这个消息经我班主任的乌鸦嘴迅速在全",
"校蔓延而后又经过各种渠道迅速汇总到我父母耳朵"};
if(-1 == priChi(chinese))
{ /打印异常/
printf("Press any key to exit");
fflush(stdin);
getch();
return 1;
}
return 0;
}
int priChi(unsigned char chi)
{
unsigned char mat[16][2];
int i=VGA,j=VGAHI,k;
int sec,pot;
FILE HZK;
if((HZK=fopen("hzk16","rb"))==NULL) /打开字体库文件/
{
printf("Open style file (hzk16) failed!\n");
return -1;
}
initgraph(&i,&j,"");
while(chi)
{
sec = chi-0xa0; /获得区码/
pot = (chi+1)-0xa0; /获得位码/
fseek(HZK,(94(sec-1)+(pot-1))32l,SEEK_SET);
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++)
if(mat[j][i] & (0x80 >> k)) /测试为1的位则显示/
putpixel(X+i8+k,Y+j,WHITE);
X += WIDTH; /下一字符的横坐标/
if(X >= MAXX)
{
X = 0;
Y += HIGH; /下一字符的纵坐标/
if(Y >= MAXY) /满一页/
{
printf("press any key to print other words");
getch();
system("cls"); /清屏/
Y = 0;
}
}
chi += 2; /指针指向下一中文字符/
}
getchar();
closegraph();
fclose(HZK);
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)