プロが教えるわが家の防犯対策術!

簡単に聞きます。すごく困ってます。

func(istream** out, char *in);

C++(VC)で上のようなchar*のバッファをistreamで出力するような関数を作成したいです。
が、その方法が良く分かりません。
istreamはすでに格納された物から読み込むことにしか
したことがありません。
調べてもさっぱりです・・・。

どなたか詳しい方がいらっしゃいましたら是非ご教授下さい!

A 回答 (9件)

No.4です。



> 文字列だけではなく、バイナリデータも考えてます。

istrstreamの扱う文字列はC標準のヌル終端文字列ではなく単なるchar配列だと思います。
istrstream( char* pch, int nLength )形式のコンストラクタでistrstreamを構築すればやりたいことができるんじゃないかと思いますが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
istrstreamは文字列としてだけでなく使えるんですね。早速試してみたいと思います。

お礼日時:2006/08/01 23:35

#6補足>読み込んだbufをstreamで提供


であれば、#8で言われるようにistrstream で良いんじゃないでしょうか
例えば、
#include <strstream>
#include <cstdio>
#include <cstring>

using namespace std;

int main(void){
char buff[256];
for(int i=0;i<256;i++){
buff[i]=(char)i;
}

istrstream iss(buff, 256);//buff には、既に読み込まれているバイナリデータ

unsigned char readBuff[16];

while(true){
memset(readBuff, 0, 16);
if(iss.read(readBuff, 16).eof())break;//istrstream からの読込
for(int i=0;i<16;i++){
printf("%02X ", readBuff[i]);
}
printf("\n");
}

return(0);
}
みたいな感じで、、
でも、元がデータファイルなんだったら、
ifstream をそのまま使えばいいような気がします。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
サンプルコードまで書いてもらって助かります!
試して見たいと思います。

お礼日時:2006/08/01 23:36

#6の方の補足要求に対する回答をお待ちするとして、


もしもstrstreamを使うならstringstreamの方をお勧めしておきます。
    • good
    • 0

#2>istreamで出力したいです。

ostreamを使ってうまいことできないんでしょうかね。

私も、istrstream
なのかなと思いますが・・
質問者の考える理想的な使い方というか動作を
擬似コードでいいので説明していただけないでしょうか

この回答への補足

回答ありがとうございます。

void
func(istream** out, char *in)
{
  char* buf;
  Read(&buf); /* すでにあるバイナリファイルの読み込み(例えばgif/jpeg) */

  /* … */

  *out = ??; /* ←読み込んだbufをstreamで提供 */
}

ということができればと思います。現実的ではないのでしょうか?

補足日時:2006/07/19 20:26
    • good
    • 0

istream:入力に使用します。


ostream:出力に使用します。
iostream:入出力に使用します。

質問者の意図は入出力したいストリームは? と、思えます。その場合はiostreamを使用する事になります。

参考URL:http://www.kab-studio.biz/Programing/Codian/iost …

この回答への補足

回答ありがとうございます。
URL参考になります。
抜けていたのですが、バイナリファイルにも対応する必要があるんです。

補足日時:2006/07/19 20:21
    • good
    • 0

文字列を入力ストリームに登録して、その入力ストリームからデータを取り出したい(要するにsscanfのようなこと)、ということで良いでしょうか。



それならistrstreamを使えるかもしれません。

参考URL:http://www.microsoft.com/japan/developer/library …

この回答への補足

すみません。補足です。
文字列だけではなく、バイナリデータも考えてます。

補足日時:2006/07/19 20:20
    • good
    • 0

ど~いうときに istream に出力する必要があるのか, 全く見当がつきません. 端的には「考え方からして間違っている」類. 小

手先で変なことするより, 考え直した方がいいと思う.

この回答への補足

回答ありがとうございます。
>ど~いうときに istream に出力する必要があるのか,
istream型はユーザが受け取る場合に良く使用されると思うのですが(ifstream?ファイルデータ?)
例えば、こちらで保持しているバッファをユーザにstream型で提供するような場合で考えてもらえればと思います。

補足日時:2006/07/19 20:11
    • good
    • 0

>istreamで出力する


ostream では?

この回答への補足

↓にも書きましたが、istreamで出力したいです。ostreamを使ってうまいことできないんでしょうかね。

補足日時:2006/07/19 06:57
    • good
    • 0

> C++(VC)で上のようなchar*のバッファをistreamで出力するような関数を作成したいです。


> が、その方法が良く分かりません。
istreamは「入力用ストリーム」なのでそんなことはできません。
出力用ストリームはostreamです。

http://www.geocities.jp/ky_webid/cpp/library/033 …

この回答への補足

回答ありがとうございます。
istreamでは不可能ですか。
ostreamからistreamへ変換ってできないんでしょうかね。

補足日時:2006/07/19 06:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!