教えて下さい。VB.NETで、
Byte型の配列を文字列に変換するのに、
Dim strWk As String = BitConverter.ToString(byteArray)
これを、使って一発変換できますが、
これの逆、つまり、このstrWkに入った文字列をByte型の配列にセットする
一番良い方法とは、どうゆう方法がありますでしょうか?
よろしくお願いします。
BitConverter.GetBytes メソッド (Char)使えばいいんじゃない?。
もしくは
System.Text.Encoding クラスを調べてみるとか。
ボクはプログラミングにおいて一番良い方法と言われると、
既存の関数を使うことではなく、基礎的なコマンドを自分の力で
組み合わせて目的の関数を自作する事だと思ってます。
>一番良い方法とは、どうゆう方法がありますでしょうか?
そんなこと書かれるとレス付けるのが怖くなります。いくら経験を
積んでも更に良いロジックは後から考え出されるので、
一番良い方法 = 自分で考え出す
…でしょうかねぇ(^^;)。
> 一番良い方法 = 自分で考え出す
>
> …でしょうかねぇ(^^;)。
私の場合、自作関数で逆のことをやれて居ますが、
どうゆう観点で良し悪しを判断するのかも曖昧なまま
何を持ってして一番良いと判断するんだろうね。
その評価の仕方をまずは教えて欲しいです。
Dim str As String
Dim byteA() As Byte
ReDim byteA(2)
byteA(0) = 61
byteA(1) = 62
byteA(2) = 63
str = BitConverter.ToString(byteA)
MessageBox.Show(str)
このソースで試していたら、これ、単純に16進数に変換されていました。
16進数から10進数に変換させるソースを組めば戻すことは可能になると思います。
あと、ハイフンで数字を区切られているので、楽になると思います。
一番、いい方法と書かれていますが、小梅さんがいい方法と判断するのはどこら辺までですか・・・・・・・
逆変換するのを自作関数として作っておけば、いい方法になります。
としか答えようがない・・・・・・・・・・・・
例示をだして、それは一番いい方法ではありません。
等といわれるのは、私はゴメンです。
時間があったので、ちゃちゃっと作ってみました。
16進数から10進数の変換って関数を使った方が速いかも(ーー;)
でも、面白そうだったので、関数を使わずに、変換するのを作ってみました。
それと、参考程度にお願いします。・・・・・・・・・・なるかな?
あと、小梅さん、質問内容に注意した方がいいかも?です。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str As String
Dim byteA() As Byte, byteB() As Byte
Dim check As Boolean
ReDim byteA(2) : ReDim byteB(2)
byteA(0) = 61
byteA(1) = 62
byteA(2) = 63
str = BitConverter.ToString(byteA)
MessageBox.Show(str)
Dim cls As Converter
cls = New Converter
check = cls.Decode(str, byteB)
Dim i As Integer
If check Then
For i = 0 To UBound(byteB)
MessageBox.Show(byteB(i))
Next
Else
MessageBox.Show("変換に失敗しました。", "Error")
End If
End Sub
End Class
Public Class Converter
Public Function Decode( _
ByVal [String] As String, _
ByVal Bytes() As Byte) As Boolean
Dim index As Integer, index2 As Integer
Dim count As Integer
count = 0 : index2 = 0
Decode = False
Try
Do
index = [String].IndexOf("-", index2)
If index <> -1 Then
Bytes(count) = To16([String].Substring(index2, index - index2))
index2 = index + 1
count += 1
Else
Bytes(count) = To16([String].Substring(index2))
Decode = True
Exit Do
End If
Loop
Catch ex As Exception
Exit Function
End Try
End Function
'16進数を10進数に変換
Private Function To16(ByVal Get16 As String) As Integer
Dim sansyutu As Integer = 0
Dim souko As Integer = 0
Dim data As String = 0
Dim i As Integer
For i = 0 To Get16.Length - 1
data = Get16.Substring(i, 1)
Try
If Not (data >= 0 And data <= 9) Then
Return 0
End If
Catch ex As Exception
If Not ((data >= "A" And data <= "F") Or _
(data >= "a" And data <= "f")) Then
Return 0
End If
End Try
souko = Get16.Length - i - 1
sansyutu += (para(data) * (Math.Pow(16, souko)))
Next
Return sansyutu
End Function
Private Function para(ByVal data As String) As Integer
Select Case data
Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
para = data
Case "A", "a"
para = 10
Case "B", "b"
para = 11
Case "C", "c"
para = 12
Case "D", "d"
para = 13
Case "E", "e"
para = 14
Case "F", "f"
para = 15
End Select
End Function
End Class
16進から10進は
str16進 = "AA"
int10進 = Cint("&h" + str16進)
でできますよ
>あんさん
ソースを載せる前の文章を読んでください。
余計な労力を使わせてしまって、すみませんでしたm(--)m
ツイート | ![]() |