2012-09-13 31 views
0

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

我只是实现一个简单的[程序来转换单个字符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"); 

    } 
} 

OUTPUT:

........ 
........ 
..AA.... 
..AAAA.. 
AAAAAA.. 
AA..AAAA 
AA..AAAA 
AAAAAAAA 
AA..AAAA 
AA..AAAA 
AA..AAAA 
AA..AAAA 
........ 
........ 
........ 
........ 
+0

该行开始的“bin [0] = ARR [I] >> 7;”可以被重构为一个for循环... – 2012-09-13 18:36:28

+0

你的逻辑似乎是错误的,因为有3例'if(bin [k] == 0 && bin [k + 1] == 0)' – James

回答

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'); 
    } 
} 
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”),因为他们从来没有所谓的