ついさっきも質問してしまったんですが、またまたお願いいたします。
環境はかわらずVC++6,windows2000,MFC,ダイアログベースです。
ファイルをバイナリ形式で開いたときに、その内容を16進数で読み出すにはどのようにしたらい
いのでしょうか?
例えば文字にしても、Aであれば41とか16進数であらわされているわけで、それをそのまま
変数に代入したいのです。文字以外にも数値なども読み出したいと思っています。
CString FileName=ファイル名;
CFile fin;
fin.Opne(FileName,CFile::modeRead | CFile::typeBinary);
fin.Read(??,バイト数);
fin.Close();
ってな感じなのですが、??部分はどんな型の変数を入れればいいのでしょうか?
もしchar,BYTE型等で読み込むのであれば変換法などもご教授いただければ・・・。
何度もすみません、よろしくお願いします。
普通は BYTE ですが、そのバイナリファイルの構成は
それをどのような規則でつくったかにより、その値が数値なのか
文字列なのか決まります。
> その内容を16進数で読み出す
例えば、
10 という値は、 0x0A(16進) と同じであることは理解できていますでしょうか?
BYTEで読み込んでしまえば、その値は数値なので、16進でも、2進でも、8進でも表せま
す。
文字列として、10 は 0x0A というのがほしいのであれば、
CString s;
s.Format( 0x\02x, 10 );
で。
Blue様返信ありがとうございます。
>普通は BYTE ですが、そのバイナリファイルの構成は
それをどのような規則でつくったかにより、その値が数値なのか
文字列なのか決まります。
これについては何バイト目が文字で何バイト目が数値かわかっているのでその判断方については
問題はありません。
>BYTEで読み込んでしまえば、その値は数値なので、16進でも、2進でも、8進でも表せま
す。
この数値の変換方法を知りたかったのです。
例えば
01 0A 02 0B という並びのファイルがあったとして、
1バイト目をBYTE型で読み込んだ場合、それをそのまま 01と(エディットボックスなどに)表
示するにはどうしたらいいのでしょうか?
> 1バイト目をBYTE型で読み込んだ場合、それをそのまま 01と
>(エディットボックスなどに)表示するにはどうしたらいいのでしょうか?
16進文字列に変換するだけ。
sprintfなり CString::Formatなり std::ostringstream << std::hex なり。
もう既に書いてありますけど。
BYTE buff[ 4 ];
CString FileName=ファイル名;
CFile fin;
fin.Opne(FileName,CFile::modeRead | CFile::typeBinary);
fin.Read(buff,4);
fin.Close();
CString s, temp;
for ( int i = 0; i < 4; ++i )
{
temp.Format(%02x , buff[ i ] );
s += temp;
}
m_Edit.SetWindowText( s );
ファイル処理はなるべく try~catch処理しましょう。
επιστημη様、Blue様ご指導ありがとうございました!
無事解決することができました。
まだまだ未熟者でまた質問するとは思いますが、またお願いします。