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

通知
すべてクリア

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


Pie
 Pie
(@Pie)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

ついさっきも質問してしまったんですが、またまたお願いいたします。
環境はかわらず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型等で読み込むのであれば変換法などもご教授いただければ・・・。

何度もすみません、よろしくお願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

普通は BYTE ですが、そのバイナリファイルの構成は
それをどのような規則でつくったかにより、その値が数値なのか
文字列なのか決まります。

> その内容を16進数で読み出す
例えば、

10 という値は、 0x0A(16進) と同じであることは理解できていますでしょうか?
BYTEで読み込んでしまえば、その値は数値なので、16進でも、2進でも、8進でも表せま
す。

文字列として、10 は 0x0A というのがほしいのであれば、

CString s;
s.Format( 0x\02x, 10 );

で。


返信引用
Pie
 Pie
(@Pie)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

Blue様返信ありがとうございます。

>普通は BYTE ですが、そのバイナリファイルの構成は
それをどのような規則でつくったかにより、その値が数値なのか
文字列なのか決まります。

これについては何バイト目が文字で何バイト目が数値かわかっているのでその判断方については
問題はありません。

>BYTEで読み込んでしまえば、その値は数値なので、16進でも、2進でも、8進でも表せま
す。

この数値の変換方法を知りたかったのです。
例えば
01 0A 02 0B  という並びのファイルがあったとして、
1バイト目をBYTE型で読み込んだ場合、それをそのまま 01と(エディットボックスなどに)表
示するにはどうしたらいいのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 1バイト目をBYTE型で読み込んだ場合、それをそのまま 01と
>(エディットボックスなどに)表示するにはどうしたらいいのでしょうか?

16進文字列に変換するだけ。
sprintfなり CString::Formatなり std::ostringstream << std::hex なり。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

もう既に書いてありますけど。

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処理しましょう。


返信引用
Pie
 Pie
(@Pie)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

επιστημη様、Blue様ご指導ありがとうございました!
無事解決することができました。
まだまだ未熟者でまた質問するとは思いますが、またお願いします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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