質問させていただきます。
XMLファイルを圧縮後にバイナリ読み込みし、long*に設定してそれを4バイトのlong配列に格納したいと考えています。
ファイルを読み込む際にはデータ数が解らないので、ループを回したいと思っています。
以下に一部記載します。
これでpBinaryには正常にバイナリデータが入るのでしょうか?
わかる方がいれば教えてください。
******************************************
FILE *pFile = NULL;
pFile = fopen("XMLFile.xml", "rb");
int iRet = 0;
int iSize = 0;
bool bRet = false;
long *pBinary = new long;
while(bRet != true)
{
/* 4バイトずつ読み込みpBinaryに設定する */
fread(pBinary, sizeof(4), 1, pFile);
if(iRet != 1)
{
bRet = true;
}
else
{
iSize++;
}
}
No.10ベストアンサー
- 回答日時:
> 最終的にはバイナリ読み込みしたファイルデータをlong配列に格納できれば良いのです。
ならば std::vector<char> bytebuffer; に読み込んで。
long* buffer = reinterpret_cast<long*>(&bytebuffer[0]);
でいいんじゃないすか?
No.11
- 回答日時:
なかなか間違いだらけの楽しいコードですがそれはさておき。
圧縮済みのファイルを読み込んでなにをしたいのでしょう。
やりたいことによってはlongの配列にしたいのかもしれませんが、
例えば単にコピーするなどの目的ならNo.10さんの回答のようにcharの配列に入れてしまえばいいでしょう。
どんな処理をしたいのかが判れば、もっと適当な回答も出てくると思いますよ。
No.9
- 回答日時:
>最終的にはバイナリ読み込みしたファイルデータをlong配列に格納できれば良いので
す。
どうして、long型の配列にこだわるのかが、判りません。
最後のデータが、4バイトちょうどに収まらない場合は、どのようにされたいのでしょうか。
単純に考えると、long型に1バイトずつ左詰め(もしくは右詰め)にするしか、方法はないと思いますが、その場合でも、そのように格納したことを別途覚えておく必要が発生します。
>1バイト毎にlongに読み込んで、longの配列に格納すれば何バイトでも正常に格納可能なんですね。
可能です。1バイトずつ読み込んだ場合は、4回読み込んで、1つのlong型に格納ということになります。(多少ビットの操作等が必要になります。もしくは1つのlong型変数を1バイトの配列4つに見立て方法もありますが)
No.8
- 回答日時:
通常、バイナリーデータなどは、1バイト毎に処理します。
1.4バイト単位で、読み込むのは、処理速度を上げたい為なのでしょうか?
2.配列に格納した後、その格納したデータをどうされたいのでしょうか。つまり、本当になさりたいことは、何なのでしょうか?
上記のことが、判ると、もっと良い回答が得られるかもしれません。
一般論としては、以下のようにします。
1.読み込みバッファー(読み込む領域)を大きくとる。
(約64Kバイトぐらい。この64の根拠は、経験値)
2.64Kバイト毎に、一気に読む。
その時に、何バイト読めたが判るので、そのサイズ分を処理する。
(通常は、64Kバイトの読み込み成功がN回続き、最後の1回がMバイトになります(Mは64Kバイト以内))
この回答への補足
1バイト毎にlongに読み込んで、longの配列に格納すれば何バイトでも正常に格納可能なんですね。
最終的にはバイナリ読み込みしたファイルデータをlong配列に格納できれば良いのです。
No.7
- 回答日時:
> 末尾はどのように対処するのが得策でしょうか?
知りません。long配列に格納しようとは思っていませんから。
この回答への補足
末尾問題も無事に解決しました。
何度もアドバイス頂きましてアリガトウございます!
今回の質問でやり取りする中できちんと理解することができました。
それではレベルの高いプログラムが書けるように頑張りたいと思います!。
No.6
- 回答日時:
末尾の問題はなんとかするとして:
std::vector<long> buffer;
long tmp;
while ( ファイルからtmpに4バイト読み込む ) {
buffer.push_back(tmp);
}
long* pBinary = &buffer[0]; // 読み込んだlong列の先頭
long size = buffer.size(); // long列の長さ
この回答への補足
fread(tmp, 4, 1, pFile);でファイルから読み込んでlong型のvector配列に格納するんですね。
末尾はどのように対処するのが得策でしょうか?
全く同じバイナリデータで無いとファイルの復元は出来ないですよね?
No.5
- 回答日時:
>>pBianryに確保された領域を一度も大きくしていないから。
> とはどう解決すればいいのでしょうか?
> アドバイスをお願い致します。
そもそも、読み込み対象であるファイルのサイズが4の倍数でなかったら、末尾が狂いませんか?
僕なら「longの配列に…」を改めます。
この回答への補足
確かにそうですね・・
例えば最終的な設定対象がlongの配列であるとすれば
ファイルの読み込みはchar*にしてlong*に変換して設定対象に格納するといった流れでしょうか?
どんな処理ならうまく渡せるかイメージできないんです・・
No.4
- 回答日時:
> fread(pBinary, sizeof(4), 1, pFile);
とんでもない勘違い。sizeof(4)ってなんですか?
この回答への補足
fread関数が下記のようなので、4バイトという意味で書きました。
sizeofは必要ありませんでしたね・・
size_t fread(void *buf, size_t size, size_t n, FILE *fp);
size_t size : 読み込みデータのバイト長さ
またアドバイス等がありましたら回答頂けると助かりますのでよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- C言語・C++・C# 100バイトのバイナリファイルを読み込んで別のファイルに書き込みたいのですが、型をどうすればいいのか 1 2022/11/03 17:11
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- PHP phpでcookieがうまく保存されない 2 2023/08/02 16:40
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル内の(&H0A)を(&H0D0A)...
-
テキスト文字列をSQLSevrerのIm...
-
DXFファイルをVBで取り込み、図...
-
グレースケール画像の画素値を得る
-
ファイルをメモリに出力する方法
-
VB4.0の「LSet」と同等の機能を...
-
VBAでパワーシェルを実行したい...
-
ファイルのアクセス回数について
-
ファイルコピーのスクリプトで...
-
Windows10でコマンドプロンプト...
-
Gitについて質問。 クローンし...
-
【VB.NET】App.configにファイ...
-
EXCEL 検索時の設定
-
初心者powershellのPS1ファイル...
-
windowsでテキストファイルの各...
-
パワポでスライドをコピーでき...
-
SaveAsの保存先について
-
同一フォルダ内の別ブックから...
-
バッチファイル XCOPYで上書き...
-
カンマ区切りのCSVファイルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイト型のデータを16進表記で...
-
VBAでテキストファイルを複数開...
-
RGBのバイナリデータをCImageに...
-
VBAでテキストファイルの改行を...
-
DXFファイルをVBで取り込み、図...
-
[VBS] 16進数でバイナリファイ...
-
ファイル内の(&H0A)を(&H0D0A)...
-
ファイルをメモリに出力する方法
-
テキストファイルを後ろから読...
-
Cで2次元配列にCSVファイルを...
-
ファイル入力のデータを構造体...
-
Excel VBAで画像解析
-
VBScriptの配列は、要素数を指...
-
ファイルからビット単位での読...
-
fread関数の使い方がわかりませ...
-
awk getlineをもう一度ファイル...
-
バイナリファイルでOutOfMemory...
-
VBSにてCSV読み込みし比較
-
バイナリファイルの一部分をカ...
-
日本語混じりのファイルをラン...
おすすめ情報