教えてください

[戻る]
MH 2002/06/14(金) 17:33:24
はじめまして!
C++、VisualC++は初心者です。
今C++でバイナリデータをシフト変換するプログラムを作っています。
ファイルを読込んでその読込んだデータを右か左にNビットシフト変換しそれを新たな
データに保存するプログラムを作っています。

何もわからないので、細かく教えていただけたら幸いです。

これをMFCでも作成してみる予定です。

よろしくお願いします。

駄犬 [E-Mail] 2002/06/14(金) 17:48:58
こっちは捨てたのですか?
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200205/02050018.txt

Joan 2002/06/15(土) 11:38:46
まず、
・ビットシフト
・ファイルを開く
・ファイルを保存する
のプログラムが書けますか?C++の入門書レベルなので
参考書を読み直してみて十分解ける問題だと思います。

それでもまたわかれなければ、レスを分からない点を
書き込んでください。

MH 2002/06/17(月) 14:28:33
このようなプログラムでファイルを開いていますが、保存の時はどのようにすればいい
のですか??
    fh1=_open(filename,O_RDONLY|O_BINARY)

いくつかやっていますがうまく保存ができません。

[E-Mail] 2002/06/17(月) 15:05:33
> いくつかやっていますがうまく保存ができません。

少しご自身で実施されている内容を整理して、ヘルプで _open の
内容をじっくり参照することをお勧めします。
「色々やったけど、なんだかうまくいきません」と言われても
欲しい回答は得られないでしょう。

sugar 2002/06/17(月) 15:12:06
>    fh1=_open(filename,O_RDONLY|O_BINARY)
>
O_RDONLYの意味を調べれば、どうして保存(=書き込み)ができないのかがわかるような。

MH 2002/06/17(月) 15:37:47
読み込みは書いた文章でやりました。
書込みは
fh2 = _open(filename, O_CREAT | O_WRONLY | O_APPEND | S_IREAD | S_IWRITE );

で、やりましたがうまく結果が書き込まれません

いもちぃ 2002/06/17(月) 16:06:00
こっちは捨てたのですか?
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200205/02050018.txt

[E-Mail] 2002/06/17(月) 16:53:47
こっちは捨てたのですか?
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200205/02050018.txt

MH 2002/06/18(火) 19:00:20
両方同じ系列なんですか??両方見ています。

バイナリデータを読込んでシフト演算はうまくいったのですが、結果をファイルに保存
ができません。

私の作っているプログラムの一文です。
fh1=open(filename, O_RDWR | O_BINARY);
printf(" \n");
fh2=open(filename, O_WRONLY | O_BINARY | O_APPEND | S_IREAD , S_IWRITE);
printf(" \n");
if (fh1==-1)
.<省略>.
else
{
while (1)
{
rbyte = read(fh1,buf,65536);
printf("rbyte=%d\n",rbyte);
dump(rbyte,buf,c);
printf("\n");
if (nx==1)
{

dump1(rbyte,buf,c,fh2);void dump2 (int byte, unsigned char *buf,int c,int fh2)
.<省略>.
printf("%2x " ,(*(buf+ad)>>(nn))|(num)); *この結果を保存したいです

マルチトスポ 2002/06/18(火) 22:35:17
まずはここを読むべきです。
http://rararahp.cool.ne.jp/cgi-bin/lng/lng.htm

しっかり読み行動に移すことでゾンビのような無気味な人たちから(失礼!冗談です)解
放されるでしょう。

テン 2002/06/18(火) 22:35:48
 MHさん のソースをを見て気になったこと

その1。
>fh2=open(filename, O_WRONLY | O_BINARY | O_APPEND | S_IREAD , S_IWRITE);
fh2 が -1 のチェックは?、その他 _read, _writeのチェックは?

その2.
>fh2=open(filename, O_WRONLY | O_BINARY | O_APPEND | S_IREAD , S_IWRITE);
                    >。。。   | S_IREAD , S_IWRITE);
                    。。。    , _S_IREAD | _S_IWRITE);

その3。
>fh2=open(filename, O_WRONLY | O_BINARY | O_APPEND | S_IREAD , S_IWRITE);
第3パラメータを指定するときは、第2パラメータに _O_CREAT が必要...とヘルプにあ
ります。
fh2=_open(filename, _O_CREAT | _O_WRONLY | _O_BINARY | _O_APPEND , _S_IREAD | 
_S_IWRITE);

その4.
>while (1)
>{
>rbyte = _read(fh1,buf,65536);
if (rbyte <= 0)    break;

その5.
_write(fh2,buf,rbyte); が無い

その他。
たぶん記載ミスとおもいますが、open read 当関数の初めに _ が抜けている。

テン 2002/06/19(水) 13:10:54
もう一箇所見つけました。

>fh1=open(filename, O_RDWR | O_BINARY);
>printf(" \n");
>fh2=open(filename, O_WRONLY | O_BINARY | O_APPEND | S_IREAD , S_IWRITE);

filename が同じということは?

MH 2002/06/20(木) 09:39:54
管理者の方へ
プログラムを記載してすいませんでした。
今後は気をつけます。
申し訳ありませんでした。

MH 2002/06/20(木) 09:45:31
シフト変換はうまくいきました。
しかし、結果をファイルに保存すると最後の方で同じ結果がでてしまいます。
どのようにすれば正常な結果を出力できるのでしゅうか??

バイナリで
00 00 00 00 00 12 24 52 A0・・・・・・・・・・・・・

と言う形で出力されますが、最後のファイルを読込んだ時バッファが少ないために
残りが前の出力として保存されてしまいます。

どのように直したらいいのですか??教えてください

[E-Mail] 2002/06/20(木) 13:18:38
> シフト変換はうまくいきました。
> しかし、結果をファイルに保存すると最後の方で同じ結果がでてしまいます。

「同じ結果」とは、何と同じ結果なのでしょう?

> バイナリで
> 00 00 00 00 00 12 24 52 A0・・・・・・・・・・・・・
>
> と言う形で出力されますが、最後のファイルを読込んだ時バッファが少ないために
> 残りが前の出力として保存されてしまいます。

現在の処理がわからないので回答しようがありません。
「最後のファイルを読込んだ時」という事は複数のファイルを対象とした処理を
作成されているんでしょうか?

今までの質疑応答からはそのような内容は読み取れないのですが。

他のマルチポスト先で、そのような話しになったりしてるんですか?

2002/06/24(月) 20:35:29
>プログラムを記載してすいませんでした。
プログラムの記載よりマルチポストのほうが問題です。
あちらは見事にレスが付いてませんが・・・。

>と言う形で出力されますが、最後のファイルを読込んだ時バッファが少ないために
>残りが前の出力として保存されてしまいます。
ファイルを最後に読み込んだ時 ですね。きっと。
下のrbyteが65536より小さいのに65536writeしているのでわ?
>rbyte = read(fh1,buf,65536);

古いスレッドには追加発言できません。