Visual Basicでバイト型配列から℠tring型に変換するコードを紹介します。
バイト型配列から文字列(String)型に変換する場合、多くの場合ではバイト型の配列にはShift JISの文字コードで文字列データが格納されています。
Visual Basic(.NET Framework)ではString型の文字列はunicodeで扱われるため、単純にバイト配列のデータをString型にコピーしても文字コードが違うため同じ文字列として扱えません。
バイト型配列からString型に変換するためには、文字コードの変換も含めて変換処理をする必要があります。Visual Basicでは System.Text.EncodingクラスのGetStringメソッドを利用することで、文字コードのエンコードを含めてバイト型配列から文字列型への変換ができます。
バイト型配列からString型に変換するには EncodingオブジェクトのGetString()メソッドを利用します。
Windows Formアプリケーションを作成し、下図のUIを作成します。TextBox2つ、Buttonを1つフォームに配置します。
下記のコードを記述します。配置したボタンのクリックイベントを実装します。
Imports System.Text
Public Class FormArrayToString
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim inputstr As String
inputstr = TextBox1.Text
Dim bytestr() As String
bytestr = inputstr.Split(",")
Dim bytedata(bytestr.Length) As Byte
For i = 0 To bytestr.Length - 1
bytedata(i) = Convert.ToByte(bytestr(i), 16)
Next
Dim resultstr As String
resultstr = Encoding.GetEncoding("shift_jis").GetString(bytedata)
TextBox2.Text = resultstr
End Sub
End Class
下記のコードで、TextBox1に入力された文字列をinputstr変数に代入します。代入後 "," で区切り文字列の配列に代入します。その後文字列の配列の要素を16進表記として数値に変換します。変換した値をbytedata配列 (バイト型の配列)に代入します。
下記の文字列が入力された場合、
bytestr の値は下記になります。
bytedata の値は下記になります。
作成したバイト配列 bytedata を文字列に変換します。
GetEncoding()メソッドを呼び出し、エンコーディングオブジェクトを取得します。今回は"shift_jis"を与えることでSJISのエンコーディングオブジェクトを取得しています。取得したエンコーディングオブジェクトのGetString()メソッドを呼び出し、文字列に変換します。GetString()メソッドの第一引数に変換元のバイト配列を与えます。変換結果はメソッドの戻り値として返ります。
Dim resultstr As String
resultstr = Encoding.GetEncoding("shift_jis").GetString(bytedata)
変換した文字列をTextBox2に表示します。
TextBox2.Text = resultstr
プロジェクトを実行します。下図のウィンドウが表示されます。
上部のテキストボックス(TextBox1)に文字列を入力します。今回は42,65,61,72,82,CD,83,4E,83,7D,82,B3,82,F1
の文字列を入力します。
[Button1]をクリックします。入力文字列をカンマで区切りバイト配列に変換したものを文字列に変換した結果が表示されます。