バイナリデータの表示方法は?

[戻る]
さおり 2002/06/01(土) 00:54:46
こんばんは。さおりと申します。
バイナリデータの表示方法についてお聞きしたいです。
環境は、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などを見ても、より目的に
適ったような関数は見つからず、ほかに方法も思いつきません。

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

とおりすがり 2002/06/01(土) 02:25:41
  sprintf(buffer2, "%x", *p);
でいいと思いますけど。

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

駄犬 [E-Mail] 2002/06/01(土) 03:00:23
    sprintf(buffer2, "%02x ", (unsigned char)*p);
てなとこでは。

さおり 2002/06/01(土) 11:29:42
[[解決]]
こんにちは。さおりです。
とおりすがりさん、駄犬さん返答ありがとうございます。

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

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

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

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

とおりすがり 2002/06/01(土) 12:40:23
「変換したいバイト数」ってのは絶対に50バイトですか?
50バイトだとしても、もう少し仕様変更に柔軟に対応できるような
書き方をすべきですね。
#defineとかで。

古いスレッドには追加発言できません。