人気ブログランキング | 話題のタグを見る
(VB.Net)String型変数の値(文字列)を16進数でダンプする
デバッグ中に文字列を16進数でダンプする方法です。

エンコーディングを指定し、そのエンコーディングで文字列をByte型配列にします。
(WindowsはAPI等内部的に文字列はUTF-16で処理しているので、エンコーディングはUnicode(UTF-16)にしておきます。)
その後、数値書式指定でX2で2桁16進数に出力します。
下記は引数に渡された文字列をコンソールに出力する例です。

Private Sub DumpString(ByVal str As String)
' エンコーディングはUnicode
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バイトで表すということです。

参考:
Wikipedia UTF-16
Unicodeの概略を理解する
ITpro 文字コードの基本
バイト列と数値を変換するには?
by jehoshaphat | 2008-12-29 23:41 | .Net開発


<< (.Net)RichTextB... (Web)PDFを配布するため... >>