2016-08-06 12 views
-6
Function convertToText(ByVal data As String) As String 
Dim result As String = Nothing 
Dim i As Integer = 0 
Dim j As Integer = 0 

    For Each c As Char In data.ToCharArray 
     j *= 2 
     If c = "1"c Then j += 1 
     i += 1 
     If i = 8 Then 
      i = 0 
      result &= Chr(j) 
      j = 0 
     End If 
    Next 
    Return result 
End Function 

バイナリをテキストに変換しますが、その背後にあるロジックを理解するのは少し難しいです。 誰か助けてください。このVBコードの意味を説明してください

+1

このコードはコンパイルされないため、何もしません! ( 'End If'が欠落し、' data'が宣言されていません)また、正しくインデントされていないため、読みにくいです。コンパイルするコードを含めてください! –

+2

@ OlivierJacot-アプリを使った投稿は難しいですが、今編集しました。そしてそれはコンパイルします –

答えて

2

コードは、8ビット文字コードを表す2進数を含むテキストを、これらの文字を含む文字列に変換するようです。

for eachループは、入力のすべての2進数字( "0"または "1")にループします。各結果文字のコードが計算され、8個の入力文字ごとにコードが完成したものとみなされ、コードが決定された新しい文字が結果に追加されます(result &= Chr(j)result = result & Chr(j)と同じです。Chr(j)は、文字に変換する)。変数iはビットを数えます。

変数jは、文字コードを保持します。ビットが "1"の場合、jj += 1j = j + 1と同じです)に1が加算されますが、 "0"の場合は加算されません。

右端のビット位置の "1"は1の(小数点)値を持ちます。その左の隣に2の値があります。次に4が続きます。この値は、8ビットの数字の左端のビットが128に達するまで、各位置で2倍になります。したがって、jは各ループで2倍になります(j *= 2j = j * 2と同じです)。

例わずか4ビットで:

data = "1010" 

進数1010は

1 * 8 + 0 * 4 + 1 * 2 + 0 * 1 = (decimal)10 

を意味するコードがこの

j = 0  => 0 

j *= 2  => 0 
j += 1  => 1 'since c = "1" 

j *= 2  => 2 
'no += 1   since c = "0" 

j *= 2  => 4 
j += 1  => 5 'since c = "1" 

j *= 2  => 10 
'no += 1   since c = "0" 

を行い、我々は最初に追加1は3回倍になると8になります。 2番目の1が追加されたのは1回だけ倍増し、2になります。 8 + 2 = 10.

関連する問題