2016-08-09 9 views
0

"768932A3"という文字列が2つに分割されているとします: 76 89 32 A3バイナリに変換するためです。私はループしてみましたが、うまくいきません。VB.Netは文字列をループします

For i = 0 To data.Length - 1 

    j = i + 2 
    incremented &= Convert.ToInt64(data.Substring(i, j), 16) 
    ascii &= Chr(Convert.ToInt64(data.Substring(i, j), 16)) 
    i = j + 2 

Next 
+0

今、注意してください。 Chrはスレッドの現在のANSIコードページを使用しています。それが文字列が16進文字列にシリアル化された時と場所とは異なっていたなら、それを間違ってデコードするでしょう。 (そして、あなたの現在のANSIコードページはASCIIとは言えないので、あなたの変数には誤解を招くような名前があります。)実際には、シリアル化中にどのエンコーディングが使用されたかを確かめて、テキストのデコードは、通常、バイト配列を介して行われ、System.Text.Encodingクラスを使用します。 「.NETの文字エンコーディング」(https://msdn.microsoft.com/en-us/library/ms404377.aspx)を参照してください。 –

答えて

0

サブストリングの第2パラメータは終了位置ではなく、開始位置から考慮する文字の長さです。

For i = 0 To data.Length - 1 Step 2 
    ' Not clear what are you trying to do here 
    ' incremented &= Convert.ToInt64(data.Substring(i, 2), 16) 

    Dim value As Long = Convert.ToInt64(data.Substring(i, 2), 16) 


    ascii &= Chr(Convert.ToInt64(data.Substring(i, 2), 16)) 
Next 
+0

未処理のオーバーフロー例外に関するエラーが発生しました –

+0

テスト文字列 " 768932A3 "。 ascii変数とインクリメントされた変数のデータ型は何ですか? – Steve

+0

私は訂正をしてくれてありがとうございました。 –