投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/8/30 16:10:33
> 1文字分の,asc1値(非数字文字は,コード値)を16進数変換し,全文字(バイト数は各々異なるが)を構成させるようなに,

そうですね。X = Hex(Asc(S)) で 16 進数変換した場合、
 S = vbTab の場合は 1 文字
 S = "ヲ"   の場合は 2 文字
 S = "を"  の場合は 4 文字
といった感じで、桁数が可変になります。

そこで桁数をそろえるため、お手軽な方法として
 「先頭にゼロを補ってから、Right 関数で右から必要な桁数を切り出す」
という手法が良く利用されています。例えばこんな感じですね。

Public Function DumpText(ByVal Text As StringAs String
    Dim P As Long
    Dim S As String
    Dim A As Integer
    For P = 1 To Len(Text)
        A = Asc(Mid$(Text, P, 1))
        S = S & Right$("0000" & Hex(A), IIf(A And &HFF00, 4, 2))
    Next
    DumpText = S
End Function


上記は Shift_JIS を想定したものですが、もしも Unicode で扱う場合は、
Asc 関数の代わりに AscW 関数を使うことになります。
たとえば S = "⑨" あるいは S = ChrW(&H2468) な文字列を渡すと
X = Hex(AscW(S)) で "2468" が得られます。

この場合、エンディアンに注意が必要となります。Unicode 扱いで変換する場合、
 UTF-16BE としては "2468"
 UTF-16LE としては "6824"
な結果が求められるわけですが、Windows では UTF-16 は通常 Little Endian を想定するため
後者の結果となるように、バイト順を入れ替えた文字列にしてやる必要があります。