デバッグ中に文字列を16進数でダンプする方法です。
エンコーディングを指定し、そのエンコーディングで文字列をByte型配列にします。
(WindowsはAPI等内部的に文字列はUTF-16で処理しているので、エンコーディングはUnicode(UTF-16)にしておきます。)
その後、数値書式指定でX2で2桁16進数に出力します。
下記は引数に渡された文字列をコンソールに出力する例です。
Private Sub DumpString(ByVal str As String)
Dim sourceEncoding As System.Text.Encoding = System.Text.Encoding.Unicode
'文字列をバイト型配列に変換
Dim bytAry As Byte() = sourceEncoding.GetBytes(str)
For Each value As Byte In bytAry
'16進数2桁でコンソールに出力
Console.Write("{0:X2} ", value)
Next
Console.WriteLine()
End Sub
たとえば "ABCあいうえお" という文字列を上のメソッドでダンプすると下記のようになります。
41 00 42 00 43 00 42 30 44 30 46 30 48 30 4A 30
さて、ここで注意しないといけないのはこの出力結果がリトル・エンディアンになっていることです。
リトルエンディアンとはUTF-16の文字コードでコードの上位バイトと下位バイトが入れ替わったバイト列のことです。
つまり、上記の結果だと通常の符号単位列としてみるにはダンプ結果を1バイトずつ交互に入れ替えます。
A B C あ い う え お
00 41 00 42 00 43 30 42 30 44 30 46 30 48 30 4A
あと、注意しないといけないのはUTF-16は基本的には2バイトで1文字あらわすのですが、2バイトに割り当てられなかった漢字は4バイトで表すということです。
参考: