掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビックエンディアンするには? (ID:52685)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> はい! ファイルマッピングについてチェックしておりましたが・・・ > 1BYTEの取り出し方(BYTEずつの移動等)が掲載されているサイトが > 見つからず断念しました。。。 マッピングに成功すれば,MapViewOfFile APIで得られたポインタを, BYTEの配列のように扱うことができます。 LPBYTE lpMem = MapViewOfFile( ... ); とやったら,lpMem[0], lpMem[1], ……のようにアクセスできます。 > 読み込み→変換→読み込み→変換→読み込み・・・っと > せっかく変換されたデータが消えてしまいます。 読み込み→変換→書き込み→読み込み→変換→書き込み…… とすれば,変換されたデータは消えませんよ。 > バッファサイズが超えたら・・・ エラーになるのかと・・・ すいません・・・ バッファサイズとファイルサイズを比較して,小さい方をとる,という方法で回避できます。 > >ところで,8で割っているのは何故? > i < BUFFER_SIZE で書いて実行したところ・・・ > 実行中に・・・ 強制終了(画面が消える現象)が起こりました。 2バイト単位でアクセスしているのだから,2で割る必要はあります。 > #include <iostream.h> これは不要です。 #使っていないから。 さらに,iostream.hは既に標準ライブラリの地位から滑り落ちているので, iostream.hは使わないようにするのがよいです。 #確か,.Net 2003ではiostream.h系列は削除されたはず。 標準C++ライブラリのiostream機能を利用する場合は, #include <iostream> のようになります。 > if ((infp = fopen("4m", "r")) == NULL) { /* ファイルを開けなければ */ > if ((outfp = fopen("test.bin", "w")) == NULL) { /* ファイルを開けなければ */ バイナリを扱うので, if ((infp = fopen("4m", "rb")) == NULL) { や if ((outfp = fopen("test.bin", "wb")) == NULL) { のように,バイナリモードで開く必要があります。 > do { > c1=getc(infp); > c2=getc(infp); > putc(c2, outfp); > putc(c1, outfp); > } while (c1!=EOF && c2!=EOF); EOFの判断は書き込む前に行う必要があります。 while ((c1 = getc(infp)) != EOF && (c2 = getc(infp)) != EOF) { putc(c2, outfp); putc(c1, outfp); } if (c1 != EOF) { /* c2の読み込みでEOFになった場合 */ putc(c1, outfp); /* 1バイトだけ読み出せていた分を書き出す }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.