バイナリファイルの特定のデータを取得 – プログラミング – Home

バイナリファイルの特定のデータを取得
 
通知
すべてクリア

[解決済] バイナリファイルの特定のデータを取得


みね
 みね
(@みね)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

Win97+VC++6.0を使用し、ファイルをバイナリで開き
データを取得するプログラムを作成しております。

過去ログを参考にさせていただき、ファイル先頭から
データを取得しエディットボックスに

ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0000000 7A 79 78 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B
0000010 6A 69 68 67 66 ~

のようにデータを表示する事は出来ました。
実際にはADDRESS 0000012 が 68 のように場所を指定してデータを
取得したいのですが、方法が判らずツマづいてます。

現在、読み込み部分は下記のような感じでやってます。

バイナリでファイルを開く部分
if(fp = fopen( myDLG.GetPathName(), rb )) == NULL )

1文字取得部分
while ((box = fgetc(fp)) != EOF) {

16進に変換部分
sprintf(asc,%02X,box);

アドバイス頂けませんでしょうか?よろしくお願いします。


引用未解決
トピックタグ
ku
 ku
(@ku)
ゲスト
結合: 24年前
投稿: 312
 

fseek(fp, 0x12, SEEK_SET);
かな


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

一気にメモリに読み込むのが難しいようなサイズを扱うのであれば、
ファイルから毎回読むという方法になると思うのですが、
一気に読める程度のものしか考えていないのであれば、
取り合えず、メモリ内に全て読み込んでしまって
メモリ上で処理してしまえば、もっと考え方は簡単になると思います。
ファイルのサイズを調べて、サイズ分のメモリを確保し、一気に読み込んでしまって
ファイルは閉じてしまいます。
あとは、メモリ上に読み込んだデータを参照して処理するだけで済むので
ファイルポインタを気にする必要はなくなります。


返信引用
みね
 みね
(@みね)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

kuさん、ありがとうございました。

fseek(fp, 0x12, SEEK_SET);
でファイルポインタの位置を移動して読み込むことで
欲しい情報が得られました。

実際は然程大きくないファイルなので
PATIO さんの方法もやってみたいのですが

BYTE配列に読み込むような感じなのでしょうか?


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

> BYTE配列に読み込むような感じなのでしょうか?
そういうイメージでよいと思います。
freadという関数を調べてみてはどうでしょう。
多分、それで見当が付くと思います。
VC6についているHELPでfreadを調べれば、サンプルソースが出ていると思います。
基本的なファイル操作なので探せばWeb上でサンプルが見つかるかもしれません。

ちなみにWin97と書かれていますけれど、Win98の間違いでは?


返信引用
みね
 みね
(@みね)
ゲスト
結合: 20年前
投稿: 5
Topic starter  

お恥ずかしい Win98です。
解決チェックしておきます

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました