我正在处理一些位图字体。这里的想法是我给了两个文件(input.txt和font.txt)。我必须从input.txt读取一个字符串并使用font.txt的内容对其进行转换,然后将相应的输出打印到另一个名为output.txt的文件中。 font.txt中的每个字符都由16x8的网格表示。
我只是实现一个简单的[rogram将单个Char A转换为位图,如下所示。有人可以帮我减少代码。
谢谢。
int main()
{
unsigned int arr[]=
{
0x00,0x00,0x10,0x38,
0x6c,0xc6,0xc6,0xfe,
0xc6,0xc6,0xc6,0xc6,
0x00,0x00,0x00,0x00
};
int i,k,j;
int bin[8];
int c=7;
for(i=0;i<16;++i)
{
bin[0]=arr[i]>>7;
bin[1]=(arr[i]>>6)&1;
bin[2]=(arr[i]>>5)&1;
bin[3]=(arr[i]>>4)&1;
bin[4]=(arr[i]>>3)&1;
bin[5]=(arr[i]>>2)&1;
bin[6]=(arr[i]>>1)&1;
bin[7]=arr[i]&1;
k=0;
for(j=0;j<4;j++){
if(bin[k]==0 && bin[k+1]==0)
{
printf("..");
}
else if(bin[k]==0 && bin[k+1]==0)
{
printf(".C");
}
else if(bin[k]==0 && bin[k+1]==0)
{
printf("C.");
}
else
{
printf("AA");
}
k=k+2;
}
printf("\n");
}
}
输出:
........
........
..AA....
..AAAA..
AAAAAA..
AA..AAAA
AA..AAAA
AAAAAAAA
AA..AAAA
AA..AAAA
AA..AAAA
AA..AAAA
........
........
........
........
答案 0 :(得分:1)
这会产生与你相同的输出,但我忽略了“.C”和“C”的逻辑。因为你的代码也是如此。 ; - )
#include <stdio.h>
int main() {
unsigned int arr[]=
{
0x00,0x00,0x10,0x38,
0x6c,0xc6,0xc6,0xfe,
0xc6,0xc6,0xc6,0xc6,
0x00,0x00,0x00,0x00
};
int i,j;
for(i=0;i<16;++i) {
unsigned char letter = arr[i];
for(j =0; j < 7; j++) {
const char *str = "..";
if(letter & 0x80) str = "AA";
fputs(str,stdout);
letter <<= 1;
}
putchar('\n');
}
}
答案 1 :(得分:0)
像这样的东西
int main()
{
unsigned int arr[]=
{
0x00,0x00,0x10,0x38,
0x6c,0xc6,0xc6,0xfe,
0xc6,0xc6,0xc6,0xc6,
0x00,0x00,0x00,0x00
};
int i,k,j;
int bin[8];
for(i=0;i<16;++i)
{
for(j=0;j<8;j++)
{
bin[j]=arr[j]>>(7-i2);
}
for(k=0;k<8;k+=2){
if(bin[k]==0 && bin[k+1]==0)
{
printf("..");
continue;
}
printf("AA");
}
printf("\n");
}
}
我删除了printf(“。C”)和printf(“C。”),因为他们从未调用过