- PR -

Process.StandardInputでバイナリデータ【26】が渡せない

1
投稿者投稿内容
自転車
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-09 19:32
初めまして、お世話になります。

バイト配列で0から255を設定して、
exeにバイナリデータが渡される事を確認しようとしています。

exeはC++で作成し
fread(buf, 1, 255, stdin);
で読み取っています。

しかし「26」の所で、freadの戻り値が0になってしまい、
読み取れませんでした。
試しに「26」を「0」と変換して渡すと。
0〜255すべて読み取れました。

StandardInputに設定できていないのか?
と思ったのですがBinaryWriterで設定した値は0〜255まで全て書き込めていましたので、
渡すときのstreamは問題ないと思っています。

状況がわかり難いと思いますが、
ご教授願います。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-05-09 19:58
引用:

自転車さんの書き込み (2008-05-09 19:32) より:
exeはC++で作成し
fread(buf, 1, 255, stdin);
で読み取っています。


引用:

自転車さんの書き込み (2008-05-09 19:32) より:
しかし「26」の所で、freadの戻り値が0になってしまい、
読み取れませんでした。


26 は(16進数ではなく)10進数なのですよね。これは Ctrl-Z に相当する文字です。これをただのバイナリーデーターとして読み込むためには、fopen 時にバイナリーモードを指定します。
http://www.google.co.jp/search?hl=ja&q=fopen+%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%83%BC%E3%83%A2%E3%83%BC%E3%83%89+rb&lr=lang_ja
自転車
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-09 20:11
unibonさん、返信ありがとうございます。

stdinは標準入力ですので、
fopenの必要は無いと思います。
stdinをバイナリモードで開く必要があるという事でしょうか。

また調べてみます。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2008-05-09 20:12
stdinということはfopen()は使えませんので、_setmode()について調べるといいかと思います。
stdin _setmode
自転車
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-09 20:15
スフレさん、返信ありがとうございます。

_setmodeでバイナリモードに変換ですね。
実践してみます。
自転車
会議室デビュー日: 2008/05/09
投稿数: 4
投稿日時: 2008-05-09 20:42
解決しました!

_setmode( _fileno( stdin ), _O_BINARY );
でバイナリモードに変換してから、
読み込むと「26」の箇所も読み取れました。

皆さんありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)