はじめまして!
C++、VisualC++は初心者です。
今C++でバイナリデータをシフト変換するプログラムを作っています。
ファイルを読込んでその読込んだデータを右か左にNビットシフト変換しそれを新たな
データに保存するプログラムを作っています。
何もわからないので、細かく教えていただけたら幸いです。
これをMFCでも作成してみる予定です。
よろしくお願いします。
まず、
・ビットシフト
・ファイルを開く
・ファイルを保存する
のプログラムが書けますか?C++の入門書レベルなので
参考書を読み直してみて十分解ける問題だと思います。
それでもまたわかれなければ、レスを分からない点を
書き込んでください。
このようなプログラムでファイルを開いていますが、保存の時はどのようにすればいい
のですか??
fh1=_open(filename,O_RDONLY|O_BINARY)
いくつかやっていますがうまく保存ができません。
> いくつかやっていますがうまく保存ができません。
少しご自身で実施されている内容を整理して、ヘルプで _open の
内容をじっくり参照することをお勧めします。
「色々やったけど、なんだかうまくいきません」と言われても
欲しい回答は得られないでしょう。
> fh1=_open(filename,O_RDONLY|O_BINARY)
>
O_RDONLYの意味を調べれば、どうして保存(=書き込み)ができないのかがわかるような。
読み込みは書いた文章でやりました。
書込みは
fh2 = _open(filename, O_CREAT | O_WRONLY | O_APPEND | S_IREAD | S_IWRITE );
で、やりましたがうまく結果が書き込まれません
両方同じ系列なんですか??両方見ています。
バイナリデータを読込んでシフト演算はうまくいったのですが、結果をファイルに保存
ができません。
私の作っているプログラムの一文です。
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)); *この結果を保存したいです
まずはここを読むべきです。
http://rararahp.cool.ne.jp/cgi-bin/lng/lng.htm
しっかり読み行動に移すことでゾンビのような無気味な人たちから(失礼!冗談です)解
放されるでしょう。
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 当関数の初めに _ が抜けている。
もう一箇所見つけました。
>fh1=open(filename, O_RDWR | O_BINARY);
>printf( \n);
>fh2=open(filename, O_WRONLY | O_BINARY | O_APPEND | S_IREAD , S_IWRITE);
filename が同じということは?
管理者の方へ
プログラムを記載してすいませんでした。
今後は気をつけます。
申し訳ありませんでした。
シフト変換はうまくいきました。
しかし、結果をファイルに保存すると最後の方で同じ結果がでてしまいます。
どのようにすれば正常な結果を出力できるのでしゅうか??
バイナリで
00 00 00 00 00 12 24 52 A0・・・・・・・・・・・・・
と言う形で出力されますが、最後のファイルを読込んだ時バッファが少ないために
残りが前の出力として保存されてしまいます。
どのように直したらいいのですか??教えてください