原帖及讨论:http://bbs.bccn.net/thread-129298-1-1.html /* 以'#'符号来显示放大显示ASCII字符(以前的老资料,适用于DOS环境) 说明:0xF000FA6E这个地址是每个(ASCII)字符显示点阵的首地址, 每个字符大小为8*8,每个字符点阵占连续的8个字节,每一字节表示 一行,从上而下,从左而右. 本人 QQ:527274766 C语言群:31545052 和 31544991 参考以下代码: */ #include<stdio.h> #include<conio.h> void ShowBigChar(int x,int y,char ch) { /* 单个字符放大 */ int i,j; char far *position; unsigned char test; position=(char far *)0xF000FA6EL+ch*8;/* 获取ch对应的字符点阵的首地址*/ for(i=0;i<8;++i) /* 8行 */ { gotoxy(x*8+1,y+i); /* 8*8点阵,所以每个字符占8列 */ test = 0x80; /* 对应2进制为1000,0000 */ for(j=0;j<8;++j) /* 8列 */ { if(*position & test) putchar('#');/* 按位与,若不为0,即显示# */ else putchar(' ');/* 否则不显示 */ test>>=1; /* 左移一位,依次变成0100,0000 0010,0000 0001,0000 ... */ } ++position; /* 移到下一字节,既点阵的第2行*/ } } void ShowBigString(char str[]) { /* 字符串放大 */ int i; if(strlen(str)>30) { /* 因为屏幕大小为80*25,所以每行最多显示 80/8=10个字符,最多显示25/8=3行 */ printf("Too much word! ( <30 )"); return; } for(i=0;str[i]!='/0';++i) /* 逐个字符显示 */ ShowBigChar(i%10,i/10*8+1,str[i]); /* i/10*8换行*/ } int main() { char s[] = "xql0501 QQ: 527274766";/* 要放大显示的字符串 */ clrscr(); /* 清屏 */ ShowBigString(s); /* 放大显示 */ getch(); return 0; } |