バイナリデータ読み込み – プログラミング – Home

バイナリデータ読み込み
 
通知
すべてクリア

[解決済] バイナリデータ読み込み


ピースケ
 ピースケ
(@ピースケ)
ゲスト
結合: 18年前
投稿: 25
Topic starter  

環境 VC++ 6.0
OS windowsxp
ダイアログベースでクラスの新規作成 Genericクラス

お世話になります。

36 36 41 35 4C 31 30 30-2D 30 30 36 4B 00 48 2E
4B 41 53 48 4 4D 41 00-00 00 33 20 33 20 4D 35
・・・・・・

とゆうようなバイナリーデータを頭から2バイト,12バイト,12バイト,2バイト・・・
と変数に格納するプログラムを書いています(全部で256バイト)。

ファイルを開く事はCreateFileを使ってるのですが
読込みや変数への格納がいまいち分りません。
またreadfile はデータすべてを読み込んでくれるものと理解しています
(この場合は256全部読み込む)が合ってますか?
http://72.14.203.104/search?
q=cache:EiZXrCRUERAJ:www.microsoft.com/japan/developer/library/jpwinpf/_win32_r
eadfile.htm+ReadFile()&hl=ja&gl=jp&ct=clnk&cd=1&lr=lang_ja

どなたか分る方がいましたらよろしくお願い致します。

HANDLE hf
LPSTR strFile // 入力データを格納する領域を指定します
DWORD  dwResult;  // 読み取ったバッファ
long m_lAaa // 最初の2バイト
CString m_szBbb  // 次の12バイト
CString m_szCcc   //  次の12バイト
CString m_szDdd   // 次の12バイト

hF = CreateFile
(FilePath,ENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

if (hF == INVALID_HANDLE_VALUE)
{
 return FALSE ;
}
ReadFile(hF, strFile, GetFileSize(hFile , NULL), &dwResult, NULL);

//これ以降の処理で先頭2バイトを m_lAaa ・・・に格納する方法が不明


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

受け取る領域がLPSTR strFile;というのはまずいですね
LPSTRはポインタなので、読み込む値を格納する領域がありません

ファイルのサイズが256バイト固定でテスト的なコードとしては
unsigned char buf[256];
ReadFile(hF, buf, sizeof(buf), &dwResult, NULL);
unsigned short lo = buf[0];
unsigned short hi = buf[1] << 8;
m_lAaa = hi | lo;

hiとloはの値は逆かもしれない

ReadFile()の戻り値がTRUEならうまくいっているでしょう
確認のためdwResultを見ると良いかもしれない


返信引用
ku
 ku
(@ku)
ゲスト
結合: 24年前
投稿: 312
 

よく見てなかった・・・


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

kuさんが書かれているように読み込みバッファはReadFileを呼び出す側で
用意する必要があります。ReadFileは引き渡された領域に読み込んだデータを
設定しているだけです。
ReadFileは指定されたサイズ分かEOFが現れるまでかの何れかまで読むので引き渡す
バッファは読み込みの最大サイズと同じだけ指定します。

関数の引数に引き渡す時にポインタになっているのは配列をそのまま引き渡せないからです。
ポインタを宣言して引き渡せば良い訳ではありません。
この辺は関数呼び出しの基本的なところなのでよく勉強してください。

効率は悪くなりますが、各変数に変数サイズ分ずつ読み込むという方法もあります。
実際には手段は色々考えられるはずなので自分でも考えて色々試して見ましょう。


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

ちなみにunsigned char buf[256];で宣言してbufに読み込むとファイル上のイメージのま
まメモリ上に読み込まれます。
CopyMemory等の関数で各変数にコピーしたら良いのではないですかねぇ。
メモリ上にどういう順番で読み込まれているかを意識できれば、想像はつくはずなんです
けれど。


返信引用
ピースケ
 ピースケ
(@ピースケ)
ゲスト
結合: 18年前
投稿: 25
Topic starter  

こちらは間違えたスレッドですので解決します。


返信引用
ピースケ
 ピースケ
(@ピースケ)
ゲスト
結合: 18年前
投稿: 25
Topic starter  

話はもう一つのスレッドで続いています。


返信引用
三草
 三草
(@三草)
ゲスト
結合: 19年前
投稿: 56
 

↓本スレッドはこちらです。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200607/06070057.txt

とURLまで入れておけば、後から見た人は便利かもしれません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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