0

我正在研究一些位图字体。这里的想法是给我两个文件(input.txt 和 font.txt)。我必须从 input.txt 中读取一个字符串并使用 font.txt 的内容对其进行转换,然后将相应的输出打印到另一个名为 output.txt 的文件中。font.txt 中的每个字符由 16x8 的网格表示。

我只是实现了一个简单的 [rogram 来将单个字符 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  
........  
........  
........  
........
4

2 回答 2

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');
  }
}
于 2012-09-13T18:49:23.480 回答
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.") 因为他们从来没有打电话

于 2012-09-13T18:52:06.207 回答