環境 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 ・・・に格納する方法が不明
申し訳ありません
間違えてしまい二重送信してしまいました。
> 読込みや変数への格納がいまいち分りません。
「いまいち分かりません」の一言ではなにがどう分からんのかさっぱり分かりません。
> とゆうようなバイナリーデータを頭から2バイト,12バイト,12バイト,2バイト・・・
> と変数に格納するプログラムを書いています(全部で256バイト)。
2 + 12x21 = 254 … 2バイト余ります。
256 / (2+12+12) = 9 ... 22 かもしれないが、いずれにせよあまることは同じ。
あまりにもツッコミどころが多すぎるのですが、基礎は大丈夫?
strFile はどこ指してる?
ReadFile 1回呼ぶだけでファイル全部読まれたらたまらないよ。
CString にバイナリ入れることはできないよ。
ああ GetFileSize してるのか... でもどのみちファイル名間違って指定されると
とんでもないことになりそうな気のせい?
MSDNより。。。
-------------------------
BOOL ReadFile(
HANDLE hFile, // ファイルのハンドル
LPVOID lpBuffer, // データバッファ
DWORD nNumberOfBytesToRead, // 読み取り対象のバイト数
LPDWORD lpNumberOfBytesRead, // 読み取ったバイト数
LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ
);
nNumberOfBytesToRead
読み取り対象のバイト数を指定します。
-------------------------
上記の説明がご不明であれば、nNumberOfBytesToRead に 1 や 2 を指定し、
実行後 lpBuffer や lpNumberOfBytesRead を確認するとご理解いただけるかと。
# ご質問をまとめてピンポイントにすると、お望みの回答が得やすいかもしれません
すみません説明不足で・・・それと初心者です
バイナリファイルは256バイトです、この中で2,12,12,2,2,3,2,2,6,3,3,6バイトの
データがはいっています。データによってはプラス2,6バイトがはいっています。
この場合は全部で57バイト使用しています、256-57 = 199 この199バイトは
すべて 00 になっています。
ReadFile(hF, strFile, GetFileSize(hFile , NULL), &dwResult, NULL);
ReadFile(hF, &strFile, GetFileSize(hFile , NULL), &dwResult, NULL);
こうですね。
CStringにバイナリーデータは入らないのですか・・・
普通は、charの変数を準備して CStringに変換する形なんですか?
ReadFileは(ファイル, 読み取る場所の先頭アドレス, 読み取る最後, その値を格納,
NULL)
ReadFile(hf,1バイト目のアドレス,2バイト目,&dwResult, NULL)
こうすると &dwResultの場所には 36 36 とはなる?
GlobalAlloc を使って先頭アドレスを取得するのかと思っています。
http://72.14.203.104/search?
q=cache:otstINKDyPgJ:www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_g
lobalalloc.htm+GlobalAlloc()&hl=ja&gl=jp&ct=clnk&cd=1&lr=lang_ja
また厳しい突っ込みお願い致します。
> バイナリファイルは256バイトです、この中で2,12,12,2,2,3,2,2,6,3,3,6バイトの
> データがはいっています。データによってはプラス2,6バイトがはいっています。
> この場合は全部で57バイト使用しています、256-57 = 199 この199バイトは
> すべて 00 になっています。
要するに57バイト読めばいいのですね?
「データによっては」とは如何なる意味ですか?
> ReadFile(hF, strFile, GetFileSize(hFile , NULL), &dwResult, NULL);
> ReadFile(hF, &strFile, GetFileSize(hFile , NULL), &dwResult, NULL);
> こうですね。
LPSTRが如何なる型か知らんけど、おそらく違います
> CStringにバイナリーデータは入らないのですか・・・
CStringは文字列を扱うものです。
そのバイナリデータの途中に'\0'があると、おそらく望む結果は得られないでしょう。
末尾のみ'\0'であればそのバイナリデータは文字列として扱えますから、CStringに
格納しても構わないと思われます。
> 普通は、charの変数を準備して CStringに変換する形なんですか?
通常いかなる手段であれ、バイナリデータをCStringに格納しません。
そのバイナリデータとやらが実は文字列であるならその限りではありませんが。
「データによっては」というのは取得するファイルによって違うという事です。
進行がゆっくりになってしまって申し訳ありません。
サンプルを少し改造して見ました、突っ込みよろしくお願いします。
コメントは僕なりの理解です。
LPBITMAPFILEHEADER lpBf; // ビットマップはこれを使っているのですが
// 今回の仕様に合うデータ型が分りません
hF = CreateFile
(FilePath,ENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
lpBf = GlobalAlloc(GPTR, sizeof('256')); // lpBf にバッファのアドレスを取得
ReadFile(hF, lpBf, sizeof('256'), &dwResult, NULL); //ファイルの0~256byteまで
//読み込む
>サンプルを少し改造して見ました、突っ込みよろしくお願いします。
サンプルって?
> sizeof('256')
なんだこりゃ?
# 無礼な物言いで申し訳ないけど、基礎ができてない。
# '背伸び'しすぎではないかしら?
すみません基礎が出来て無くって
いつもはこのような形でしかsizeofは使っていなかったので・・・
char DT[10];
memset(DT,'\0',sizeof(DT));
sizeof(256);でいいですか?
> すみません基礎が出来て無くって
# まずこれを作らないと、多分どうにもならないかも…。
> sizeof(256);でいいですか?
VC6だと多分 4 (intのサイズ)になりますが(256にはならない)、それで望み通りです
か?
>memset(DT,'\0',sizeof(DT));
この時に、なぜ、何のためにsizeofを使うのかが
理解できていないのではありませんか?
そうですか・・・
256バイトの領域は確保できないのですか?
お手数かけます。テンパッテ冷静さをかいているので
もしバイナリーデータを読み込んで変数に入れる方法の参考に
なるHPとか知ってる方がいましたら教えて下さい。
落ち着いてから質問します。