バイナリデータの表示方法は? – プログラミング – Home

バイナリデータの表示方法は?
 
通知
すべてクリア

[解決済] バイナリデータの表示方法は?


さおり
 さおり
(@さおり)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

こんばんは。さおりと申します。
バイナリデータの表示方法についてお聞きしたいです。
環境は、winMe, VC++6.0, MFCです。

char *p; //バイナリデータへのポインタ
p = buffer;  //bufferはバイナリデータの入ったchar型(char buffer[100])
int hexdata; //ASCIIコードへの変換後の16進データ格納用
for(int i = 0; i < 50; i++){   //変換したいバイト数だけループ
hexdata = __toascii(*p);  //1バイトづつASCIIコードに変換
sprintf(buffer2, %x, hexdata); //変換した16進を文字としてbuffer2に代入
strcat(bindata, buffer2);  //bindataに1文字分づつ追加
p++;

バイナリデータを表示したくて(バイナリエディタのような感じ)
上記のようなプログラム?を考えました。とりあえずプログラム中で
編集したいわけではなかったので、これで用は足りるのですが、
すごく遠回りな気がしました。でもMSDSなどを見ても、より目的に
適ったような関数は見つからず、ほかに方法も思いつきません。

もっとスマートにバイナリデータを変換する方法はあるのでしょうか?
もしあれば、ぜひ教えてほしいです。よろしくおねがいします。


引用未解決
トピックタグ
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

sprintf(buffer2, %x, *p);
でいいと思いますけど。

「変換したいバイト数だけループ」ということで50とハードコーディングしていますが
あまり感心できませんね


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

sprintf(buffer2, %02x , (unsigned char)*p);
てなとこでは。


返信引用
さおり
 さおり
(@さおり)
ゲスト
結合: 23年前
投稿: 31
Topic starter  

こんにちは。さおりです。
とおりすがりさん、駄犬さん返答ありがとうございます。

    sprintf(buffer2, %02x , (unsigned char)*p);

できれいに変換することができました。
最初のはずいぶん無駄なことをしていたのですね。
見るとなるほど!と思うのに言われるまで気づかない
自分が情けないです。

ところでとおりすがりさんに再度質問ですが、
50バイトハードコーディングしていて感心できないというのは、
データによらず50バイト固定でループすると、必要ないところ
まで、参照しちゃうのであまり好ましくないということでしょうか?

ハードコーディングの意味がわからないので、
また、とおりすがったらぜひ教えてください。


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

「変換したいバイト数」ってのは絶対に50バイトですか?
50バイトだとしても、もう少し仕様変更に柔軟に対応できるような
書き方をすべきですね。
#defineとかで。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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