2016-04-15 15 views
0

私はファイルからテキストを読み込み、バイナリとして出力しています。最初の文字が最初の単語の繰り返しです

  1. 各大文字は01で始まり、その後に5ビットが続きます。
  2. 5ビットは、文字の値を保持するものとする。 HI->(0101001)(0101010)

  3. 文字が-2などの値、B-3、C-4、D-5 ...たとえば

を有するであろう次のように私のコードスニペットは、次のとおりです。

void printinbits(int n) 
{ 
    for (int c = 4; c >= 0; c--) 
    { 
     long int k = n >> c; 

     if (k & 1) 
      printf("1"); 
     else 
      printf("0"); 
    }   
} 

int main() 
{ 
    //first letter is being repeated 
    char check[200]; 
    FILE*fin= fopen("/Users/priya/Desktop/test.txt.rtf","r"); 
    while((fscanf(fin,"%199s",check))==1) 
    { 
     for(int i=0;i<strlen(check);++i) 
     { 
      if(check[i]>=65&&check[i]<=90) 
      { 
       printf("01"); 
       int n=check[i]; 
       n-=63; 
       printinbits(n); 
      } 
     } 
    } 
    return 0; 
} 

マイ入力 - >

HELLO 

私の出力 - >

(0101001)(0101001)(0100110)(0101101)(0101101)(0110000) 

(あなたが見ることができるように、最初の文字のHが繰り返されている)(様々な文字は括弧で区切られます)

+0

提案:出力に何らかの区切り文字を追加してください。それ以外の場合は、読んで理解しにくいです。 –

+0

@SouravGhosh done。 –

+0

ロジックは文字を数字に変換し、それを「01」に追加するだけですか?文字が 'C'で、数値が' 3'( 'A'からの変位)でバイナリに変換されているとしますか? –

答えて

2

ここで単語を含むファイルhello.rtfの進ダンプですHELLOを大文字にしてください。 MacではTextEditによって生成されました。

0x0000: 7B 5C 72 74 66 31 5C 61 6E 73 69 5C 61 6E 73 69 {\rtf1\ansi\ansi 
0x0010: 63 70 67 31 32 35 32 5C 63 6F 63 6F 61 72 74 66 cpg1252\cocoartf 
0x0020: 31 34 30 34 5C 63 6F 63 6F 61 73 75 62 72 74 66 1404\cocoasubrtf 
0x0030: 34 36 30 0A 7B 5C 66 6F 6E 74 74 62 6C 5C 66 30 460.{\fonttbl\f0 
0x0040: 5C 66 73 77 69 73 73 5C 66 63 68 61 72 73 65 74 \fswiss\fcharset 
0x0050: 30 20 48 65 6C 76 65 74 69 63 61 3B 7D 0A 7B 5C 0 Helvetica;}.{\ 
0x0060: 63 6F 6C 6F 72 74 62 6C 3B 5C 72 65 64 32 35 35 colortbl;\red255 
0x0070: 5C 67 72 65 65 6E 32 35 35 5C 62 6C 75 65 32 35 \green255\blue25 
0x0080: 35 3B 7D 0A 5C 6D 61 72 67 6C 31 34 34 30 5C 6D 5;}.\margl1440\m 
0x0090: 61 72 67 72 31 34 34 30 5C 76 69 65 77 77 31 30 argr1440\vieww10 
0x00A0: 38 30 30 5C 76 69 65 77 68 38 34 30 30 5C 76 69 800\viewh8400\vi 
0x00B0: 65 77 6B 69 6E 64 30 0A 5C 70 61 72 64 5C 74 78 ewkind0.\pard\tx 
0x00C0: 37 32 30 5C 74 78 31 34 34 30 5C 74 78 32 31 36 720\tx1440\tx216 
0x00D0: 30 5C 74 78 32 38 38 30 5C 74 78 33 36 30 30 5C 0\tx2880\tx3600\ 
0x00E0: 74 78 34 33 32 30 5C 74 78 35 30 34 30 5C 74 78 tx4320\tx5040\tx 
0x00F0: 35 37 36 30 5C 74 78 36 34 38 30 5C 74 78 37 32 5760\tx6480\tx72 
0x0100: 30 30 5C 74 78 37 39 32 30 5C 74 78 38 36 34 30 00\tx7920\tx8640 
0x0110: 5C 70 61 72 64 69 72 6E 61 74 75 72 61 6C 5C 70 \pardirnatural\p 
0x0120: 61 72 74 69 67 68 74 65 6E 66 61 63 74 6F 72 30 artightenfactor0 
0x0130: 0A 0A 5C 66 30 5C 66 73 32 34 20 5C 63 66 30 20 ..\f0\fs24 \cf0 
0x0140: 48 45 4C 4C 4F 7D         HELLO} 
0x0146: 

あなたは、ファイル内の唯一の他の大文字として「ヘルベチカ」のHを見ることができない場合があり - HHELLOのための出力を生成するために会計処理します。あなたがMac上にいるかもしれないように見えるので、同じ結果、または少なくとも同等の結果を見るかもしれません。 (私は自作の16進数ダンププログラムを使用していましたが、おそらくxxd -g 1 test.txt.rtfを使用して、小文字の文字を含む16進数を生成し、最後のバイト数の行は含めません)。

プログラムが処理しているものを見ることができるように、プログラムがループ内で読み取るデータ。少なくともデバッグ中です。これは非常に基本的なデバッグ手法です。

TextEditでは、[書式]メニューの[テキストの作成]または[リッチテキストの作成]オプションを使用してリッチテキストとプレーンテキストを切り替えることができます。また、⇧⌘T(シフトコマンドT)モード。ファイル名の変更に注意してください。

コミュニティWiki以来、M Oehmpointed out可能性のある問題です。

関連する問題