解释这个VB代码意味着什么

时间:2016-08-06 15:10:39

标签: vb.net data-conversion

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

它将二进制转换为文本,但我有点难以理解它背后的逻辑。 有人请帮忙。

1 个答案:

答案 0 :(得分:2)

代码似乎将包含表示8位字符代码的二进制数的文本转换为包含这些字符的字符串。

for each循环遍历输入的所有二进制数字(“0”或“1”)。计算每个结果字符的代码,并且在每8个输入字符之后,代码被认为是完整的,并且将确定了代码的新字符添加到结果中(result &= Chr(j)result = result & Chr(j)相同。 Chr(j)将包含字符代码的Integer转换为字符。变量i计算位数。

变量j包含字符代码。如果某位为“1”,则将{1}添加到jj += 1j = j + 1相同),但如果为“0”则不会。

最右边位置的“1”的(十进制)值为1.其左边的值为2.接下来的4,依此类推。对于每个位置,该值加倍,直到8位数的最左位达到128。因此,j在每个循环中加倍(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。我们添加的第二个1只加倍一次,变为2。 8 + 2 = 10.