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
它将二进制转换为文本,但我有点难以理解它背后的逻辑。 有人请帮忙。
答案 0 :(得分:2)
代码似乎将包含表示8位字符代码的二进制数的文本转换为包含这些字符的字符串。
for each循环遍历输入的所有二进制数字(“0”或“1”)。计算每个结果字符的代码,并且在每8个输入字符之后,代码被认为是完整的,并且将确定了代码的新字符添加到结果中(result &= Chr(j)
与result = result & Chr(j)
相同。 Chr(j)
将包含字符代码的Integer转换为字符。变量i
计算位数。
变量j
包含字符代码。如果某位为“1”,则将{1}添加到j
(j += 1
与j = j + 1
相同),但如果为“0”则不会。
最右边位置的“1”的(十进制)值为1.其左边的值为2.接下来的4,依此类推。对于每个位置,该值加倍,直到8位数的最左位达到128。因此,j
在每个循环中加倍(j *= 2
与j = 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.