• ベストアンサー

Hex関数

こんにちは VBでちょっとしたことなんですが、自前の関数を作成するかどうかで悩んでいます。 nバイトの配列データ(dim xx() as Byte と宣言されている)を1バイトあたり2桁で表示したいのですが、Hex関数(あるいはHex$関数)では、0x00 の場合や0~9の場合、"0"や1桁になってしまうんですね。 もし組み込み関数で1バイトを2桁16進数表示できる変換関数があれば、自前のものより高速だし楽だと思い、迷ってます。 「そんなものはないので自分で作れ」とか「こんなのあるよ」とか教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

(1) if (n >= 16) s = hex$(n) else s ="0" & hex$(n) end if (2) s = hex$(n \ 16) & hex$(n mod 16) (3) s = right$("0" & hex$(n), 2) (4) s = right$(hex$(&H100 + n), 2)

ykkw_2001
質問者

お礼

ご回答ありがとうございます。 この短時間に4つもご回答いただけるなんてっ!! (さすが専門家、おそらく脊髄反射ですね。) むむ、しかも、2バイト系文字がない! (暗に「VBには、そのような組み込み関数はない」と・・) 極めて個人的な思い込みで高速そうな(2)を使わせていただきます。 ありがとうございました。

その他の回答 (2)

回答No.2

手っ取り早いのは Format(Hex(n),"00") でしょうか。

ykkw_2001
質問者

お礼

ご回答ありがとうございます。 そうそう、そういうのが出来て、C言語の#DEFINE見たいなことが出来れば、言うことないんですが・・・・ Dim xx As Byte xx = 10 Debug.Print Format(Hex(xx), "00") とやったときに、"0A"と出てほしいんですぅ~

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

同様の処理を作りましたが、ある程度の速度を要求されたので、C言語で作成、VBAから呼び出しと言う形になりました。 -- 普通にやると、 0―(16進変換)→0―(左に"0"を追加)→"00"―(右の2文字を取り出し)→"00" 100―(16進変換)→64―(左に"0"を追加)→"064"―(右の2文字を取り出し)→"64" のように、上位桁に"0"を付け足しておいて、下位の桁のみ取り出すというのが一般的でしょうか。 速度は比較していませんが、実は最近のCPUなら苦にならないのかも。

ykkw_2001
質問者

お礼

ご回答ありがとうございます。 >C言語で作成、VBAから呼び出し もアリなんですが、今回は購入DLLとの関係もあって・・・ >最近のCPUなら そうですよね。 結局自前で作成されてる方がコレだけいらっしゃるてことは、作るのが常道なんですね。

関連するQ&A