アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは
VBでちょっとしたことなんですが、自前の関数を作成するかどうかで悩んでいます。

nバイトの配列データ(dim xx() as Byte と宣言されている)を1バイトあたり2桁で表示したいのですが、Hex関数(あるいはHex$関数)では、0x00 の場合や0~9の場合、"0"や1桁になってしまうんですね。

もし組み込み関数で1バイトを2桁16進数表示できる変換関数があれば、自前のものより高速だし楽だと思い、迷ってます。

「そんなものはないので自分で作れ」とか「こんなのあるよ」とか教えてください。お願いします。

A 回答 (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)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

この短時間に4つもご回答いただけるなんてっ!!
(さすが専門家、おそらく脊髄反射ですね。)

むむ、しかも、2バイト系文字がない!
(暗に「VBには、そのような組み込み関数はない」と・・)

極めて個人的な思い込みで高速そうな(2)を使わせていただきます。

ありがとうございました。

お礼日時:2004/02/23 15:53

手っ取り早いのは


Format(Hex(n),"00")
でしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

そうそう、そういうのが出来て、C言語の#DEFINE見たいなことが出来れば、言うことないんですが・・・・

Dim xx As Byte
xx = 10
Debug.Print Format(Hex(xx), "00")

とやったときに、"0A"と出てほしいんですぅ~

お礼日時:2004/02/23 15:48

同様の処理を作りましたが、ある程度の速度を要求されたので、C言語で作成、VBAから呼び出しと言う形になりました。



--
普通にやると、
0―(16進変換)→0―(左に"0"を追加)→"00"―(右の2文字を取り出し)→"00"
100―(16進変換)→64―(左に"0"を追加)→"064"―(右の2文字を取り出し)→"64"
のように、上位桁に"0"を付け足しておいて、下位の桁のみ取り出すというのが一般的でしょうか。
速度は比較していませんが、実は最近のCPUなら苦にならないのかも。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>C言語で作成、VBAから呼び出し
もアリなんですが、今回は購入DLLとの関係もあって・・・

>最近のCPUなら
そうですよね。

結局自前で作成されてる方がコレだけいらっしゃるてことは、作るのが常道なんですね。

お礼日時:2004/02/23 16:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!