別スレのほうで指摘があったとおりで LPSTR strFile; だけではメモリは無い。
だから対処方法は以下のどちらかになるわけです。
1.配列をつかう(自動変数などで)
char buf[256];
ReadFile(hF, buf, 256, ...);
2.動的メモリで確保する
char* strFile=new char [256]; // あるいは GlobalAlloc でもいいけど
ReadFile(hF, strFile, 256, ...);
sizeof を使うなら 1 は ReadFile(hF, buf, sizeof buf, ...)
2 は sizeof が要らない (使ってはいけない) 場合
マジックナンバー 256 を const や #define で書きなおすほうがいいけど。
>char DT[10];
>memset(DT,'\0',sizeof(DT));
この sizeof(DT) が出てくるようなら問題ない(理解できてる)はずです。
テンパッてませんか?落ち着いて。
sizeof(DT) と sizeof('256') と sizeof(256) の違いは重要ですよ。
> ReadFileは(ファイル, 読み取る場所の先頭アドレス, 読み取る最後, その値を格納,
NULL)
ちがいますよー
MSDNでReadFile()をよく読んでみてください。
書いてあることが分からなければ、Google等でサンプルソースや解説を探してみるのもよ
いかと。
ReadFile(ファイルのハンドル,
読取ったデータの格納先,
読取るバイト数,
読取ったバイト数の格納先,
NULL)
> char DT[10];
> memset(DT,'\0',sizeof(DT));
> sizeof(256);でいいですか?
memset()の第3引数は何を指定するんでしょう?
http://www9.plala.or.jp/sgwr-t/lib/memset.html
sizeofは何をしているのでしょう?
http://phys.cool.ne.jp/physjpn/c2.htm#sec2
> 256バイトの領域は確保できないのですか?
char *szStr;
szStr = (char *)malloc( 256 );
# でも、マジックナンバーは極力使わないほうが、コード修正時に楽ですよ。
> すみません説明不足で・・・それと初心者です
初心者は関係ありませんよ、誰でも始めは初心者です。
私もまだまだ初心者ですし。
重箱の隅つつきですが、、、攻めるつもりはありません。
http://glossary.tank.jp/t004C.html
# ピースケさんがやりたいことをするには、どういう手順(コード)をふめばいいのか
# 一連の手順を紙に一つづつ書き出してみると、
# 何をやるべきか、何が分からないかが整理できるかもしれません。
# その上でご質問されてみてはいかがでしょうか?
# Q.文字列36を10進の 6 に直して、float m_lAaa に格納したいけれど、
# どういう方法がありますか?
# A.strtol()をお使いください。
# とか、きっとストレートな回答を得られるかと。
# がんばってください。
> マジックナンバー 256 を const や #define で書きなおすほうがいいけど。
> # でも、マジックナンバーは極力使わないほうが、コード修正時に楽ですよ。
tetrapodさんもご指摘されていました。
ちょっと補足です。
#define READ_DATA_SIZE 256
//または、const int READ_DATA_SIZE = 256; とか
・・・
char buf[READ_DATA_SIZE];
ReadFile(hF, buf, READ_DATA_SIZE, ...);
・・・
といった感じです。
コード中にいきなり 256 と出てきても、何の数字かぱっと分からないですよね。
例えば READ_DATA_SIZE とあれば、読み込むデータサイズだろうな、と予測できます。
また、読込み数が変わったときにも、#define もしくは const intの1箇所を
変えればいいだけなので、修正の手間も省けます。
まず、参考書等を購入されてじっくり勉強されたほうがいいと思います。
HPサイトを紹介してもいいのですが、サイトによって内容が違うので
基礎を知るには本を購入されるほうがいいと思います。
みなさんありがとうございます
Buf[256]にバイナリーデータを入れる事にしました。
バッファデータをmemsetを使用して一時変数に代入したのですが
それを目的の型への変換方法が分りません。
どうゆう方法があるか分る方がいましたらよろしくお願い致します。
char Buff[256];
char databox[13];
char Buff[256]の中にバイナリーデータを入れまた。
for(cnt = 0; cnt< 3 ;cnt++)
{
memset(databox,'\0',sizeof(databox));
switch(cnt)
{
case 0:
memcpy(databox, Buff,2);
//databox の中身をlong型に変換する方法がわかりません
//変換した値を long m_lAaa に入れたい
case 1:
memcpy(databox, Buff[2],12);
//databox の中身をCString型に変換する方法がわかりません
//変換した値を CString m_szBbb に入れたい
case 2:
memcpy(databox, Buff[14],12);
//databox の中身をCString型に変換する方法がわかりません
//変換した値を CString m_szCcc に入れたい
case 2:
memcpy(databox, Buff[26],12);
//databox の中身をCString型に変換する方法がわかりません
//変換した値を CString m_szDdd に入れたい
}
}
switch文のbreak;が抜けてます
すみません
どんなデータかもわからずに変換したいと言われましても…と思いますが。
それぞれのデータ形式の仕様提示してください。それにより変換の方法も違うでしょ
う。
//databox の中身をlong型に変換する方法がわかりません
//変換した値を long m_lAaa に入れたい
リトル/ビッグエンディアンですか。数字の文字列ですか。はてまたBCDですか。
何も考えなくていいなら、m_lAaa = *reinterpret_cast<unsigned short*>(databox);と
か。
# この意味がわからないなら、危険なので多分やめておいた無難です。
memcpy(databox, Buff[2],12);
//databox の中身をCString型に変換する方法がわかりません
//変換した値を CString m_szBbb に入れたい
こちらも同様です。文字コードはなんですか。Bufの中に終端('\0')はありますか。
CStringに格納できるもので終端があるなら(多分違いそうな気が…)以下のように。
CString m_szBbb = databox;
そうでないなら仕様を提示してください。
# 無理にループするよりは直接処理してしまうか、
# もしくはループするならインデクステーブルとポインタ変数で回した方が
# いいような気もしますが。
ごめんなさい、13でmemsetしてるから少なくとも終端はありますね。
後は中身次第ですが。
# (私見)生の即値が気持ち悪いです。
もしかして、
66
A5L100-006K
8.KASH....
って出力を期待してますか?
であれば、fscanfを調べるの
が早いかも知れない。
#三草 さんで既出だった…orz
つstrtol
がーん、もう一個の方に書いてしまいました。
質問者のピースケさん、もう一つの方を解決で閉じるようにしてください。
同じスレがもう一つあってそっちで話が続いている事も書いて置いてくださいね。
みなさんありがとうございました。
バイナリデータの読込みと型変換は以下の方法でやりました
またよろしくお願い致します。
switch(count)
{
case 0:
memcpy(databox, Buff,2);
m_lAaa = atol(chDataBox);
break;
case 1:
memcpy(databox, &Buff[2],12);
m_szBbb = databox
break;
case 2:
memcpy(databox, &Buff[26],12);
m_szDdd = databox;
break;
}