- ベストアンサー
Hex関数
こんにちは VBでちょっとしたことなんですが、自前の関数を作成するかどうかで悩んでいます。 nバイトの配列データ(dim xx() as Byte と宣言されている)を1バイトあたり2桁で表示したいのですが、Hex関数(あるいはHex$関数)では、0x00 の場合や0~9の場合、"0"や1桁になってしまうんですね。 もし組み込み関数で1バイトを2桁16進数表示できる変換関数があれば、自前のものより高速だし楽だと思い、迷ってます。 「そんなものはないので自分で作れ」とか「こんなのあるよ」とか教えてください。お願いします。
- みんなの回答 (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)
その他の回答 (2)
- tsukasa-12r
- ベストアンサー率65% (358/549)
手っ取り早いのは Format(Hex(n),"00") でしょうか。
お礼
ご回答ありがとうございます。 そうそう、そういうのが出来て、C言語の#DEFINE見たいなことが出来れば、言うことないんですが・・・・ Dim xx As Byte xx = 10 Debug.Print Format(Hex(xx), "00") とやったときに、"0A"と出てほしいんですぅ~
- neKo_deux
- ベストアンサー率44% (5541/12319)
同様の処理を作りましたが、ある程度の速度を要求されたので、C言語で作成、VBAから呼び出しと言う形になりました。 -- 普通にやると、 0―(16進変換)→0―(左に"0"を追加)→"00"―(右の2文字を取り出し)→"00" 100―(16進変換)→64―(左に"0"を追加)→"064"―(右の2文字を取り出し)→"64" のように、上位桁に"0"を付け足しておいて、下位の桁のみ取り出すというのが一般的でしょうか。 速度は比較していませんが、実は最近のCPUなら苦にならないのかも。
お礼
ご回答ありがとうございます。 >C言語で作成、VBAから呼び出し もアリなんですが、今回は購入DLLとの関係もあって・・・ >最近のCPUなら そうですよね。 結局自前で作成されてる方がコレだけいらっしゃるてことは、作るのが常道なんですね。
お礼
ご回答ありがとうございます。 この短時間に4つもご回答いただけるなんてっ!! (さすが専門家、おそらく脊髄反射ですね。) むむ、しかも、2バイト系文字がない! (暗に「VBには、そのような組み込み関数はない」と・・) 極めて個人的な思い込みで高速そうな(2)を使わせていただきます。 ありがとうございました。