• ベストアンサー

コマンドファイルから、ビットパターンの入力

C言語初心者です。勉強していて、わからない事がありますので教えて頂けないでしょうか。 題名の通りなのですが、ファイル入力で出力する型についてです。ビットッパターンで入力したものを、文字で出力したいのですが、可能でしょうか? 例えばソース中では、 char d =0x55; printf("%c\n", d); とすれば、「U」の文字が出力されます。 このdの宣言をコマンドファイルでできますでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • shige_70
  • ベストアンサー率17% (168/946)
回答No.4

#1 です。補足ありがとうございます。 入力ファイルのフォーマットの細かい条件によっていろいろ考える必要がありますが、簡単のため、入力ファイルは1行に0又は1が8バイトのみと条件を特定した場合で回答します。 補足の printf("%s", buf); の部分を以下のようにしてみてください。 { int c=0 , i ; for ( i=0 ; i<8 ; i++ ) { c <<= 1 ; if ( buf[i] == '1' ) { c |= 1 ; } printf( "%c\n" , c ) ; }

2002hare
質問者

お礼

どうも、ありがとうございました。 おかげで、コンパイルすることができました。

その他の回答 (4)

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.5

0と1のみの文字列が取得できているのであれば、strtolを使うと楽かもしれません。 #include<stdio.h> #include<stdlib.h> int main(void) {   char input[] = "01010101";   printf("%c", strtol(input, NULL, 2));   return 0; }

2002hare
質問者

お礼

有難うございます。 ライブラリで用意されているのですね。

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.3

コマンドプロンプトから > moji 01010101 character = U という結果を出したいと言うことでしょうか? argv[1][0] から argv[1][7]まで一つずつループしながら char d で宣言した変数にビットシフトで0か1の値を入れていけばできますよ。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

int main(int argc ,char** argv ){ char d; d = **argv; printf("%c\n", d); return 0; } こういう事? 例えばwindowsでmain.exeってファイルだとすると コマンドプロンプトから >main.exe U でdに「U」を渡せます。

2002hare
質問者

補足

ありがとうございます。質問の内容が判りにくい為、お手数おかけします。 内容はNO.1のshige_70様の補足の所に掲載しました。もし、よろしければ、もう一度教えていただけませんか? 又返事が遅れましたこと、お詫びいたしますm(__)m

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

入力がビットパターンとありますが、入力ファイルの内容は具体的にはどういうものですか? 例を提示してください。 それから、コマンドファイルというのは何ですか?

2002hare
質問者

補足

返事が遅くなりすみません。質問の内容がわかりにくいですね。 はい、例を挙げますと。 #include <stdio.h> #define INFILE "sample.txt" int main( void ) { FILE *fp; char buf[256]; if( ( fp=fopen( INFILE, "r" ) ) == NULL ) { printf( "入力ファイルがオープンできません\n" ); return 0; } while( fgets(buf, 256, fp) != NULL) { printf("%s", buf); } fclose( fp ); return 0; } とすると、INFILEのデータを読むことができます。 そこで、INFILEの中身の文字を2進数で書いて、出力するデータを文字で表すにはどうしたら、いいのでしょうか? 例えば、INFILEの中身を 01010101 とした時に 出力される 、値は U という文字になるようにプログラムしたいのですが、どのようにすればよいのか分かりません。 何度もすみませんが、宜しくお願い致します。