【问题标题】:EXPLAIN what this VB CODE means解释这个 VB 代码的含义
【发布时间】:2016-08-06 15:10:39
【问题描述】:
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

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

【问题讨论】:

  • 这段代码没有做任何事情,因为它不能编译! (缺少End If,未声明data)此外,它也难以阅读,因为它没有正确缩进。请包含可以编译的代码!
  • @OlivierJacot-Descombes 使用该应用程序发帖很困难,但现在已编辑。它确实编译

标签: vb.net data-conversion


【解决方案1】:

该代码似乎将包含表示 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。

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 2020-06-14
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多