こんばんは。さおりと申します。
バイナリデータの表示方法についてお聞きしたいです。
環境は、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などを見ても、より目的に
適ったような関数は見つからず、ほかに方法も思いつきません。
もっとスマートにバイナリデータを変換する方法はあるのでしょうか?
もしあれば、ぜひ教えてほしいです。よろしくおねがいします。
sprintf(buffer2, %x, *p);
でいいと思いますけど。
「変換したいバイト数だけループ」ということで50とハードコーディングしていますが
あまり感心できませんね
sprintf(buffer2, %02x , (unsigned char)*p);
てなとこでは。
こんにちは。さおりです。
とおりすがりさん、駄犬さん返答ありがとうございます。
sprintf(buffer2, %02x , (unsigned char)*p);
できれいに変換することができました。
最初のはずいぶん無駄なことをしていたのですね。
見るとなるほど!と思うのに言われるまで気づかない
自分が情けないです。
ところでとおりすがりさんに再度質問ですが、
50バイトハードコーディングしていて感心できないというのは、
データによらず50バイト固定でループすると、必要ないところ
まで、参照しちゃうのであまり好ましくないということでしょうか?
ハードコーディングの意味がわからないので、
また、とおりすがったらぜひ教えてください。
「変換したいバイト数」ってのは絶対に50バイトですか?
50バイトだとしても、もう少し仕様変更に柔軟に対応できるような
書き方をすべきですね。
#defineとかで。