【问题标题】:Why this CRC-32 code does not work on Visual Basic?为什么这个 CRC-32 代码在 Visual Basic 上不起作用?
【发布时间】:2014-07-23 05:35:41
【问题描述】:

我对 VB.NET 很陌生,我正在尝试在 Visual Studio 2013 中实现一些东西来计算字节数组的 CRC-32 字节。我遇到过各种各样的例子,一些在 VB.NET 中,一些在 C# 中。尽管如此,我还没有成功地让它们工作甚至测试它们。

例如,考虑一下我在这个网站上找到的“Mangus”中的这个特定代码。我将其复制并粘贴到 Windows 表单模板中,但出现此错误:

错误 BC30456:“转储”不是“UInteger”的成员。

我很抱歉,因为我可能做了一些非常愚蠢的事情,但我感谢任何帮助或提示。

Private Sub Main()
   Crc32.ComputeChecksum(Encoding.UTF8.GetBytes("Some string")).Dump()
End Sub

Public Class Crc32
   Shared table As UInteger()

   Shared Sub New()
      Dim poly As UInteger = &Hedb88320UI
      table = New UInteger(255) {}
      Dim temp As UInteger = 0
      For i As UInteger = 0 To table.Length - 1
         temp = i
         For j As Integer = 8 To 1 Step -1
            If (temp And 1) = 1 Then
               temp = CUInt((temp >> 1) Xor poly)
            Else
               temp >>= 1
            End If
         Next
         table(i) = temp
      Next
   End Sub

   Public Shared Function ComputeChecksum(bytes As Byte()) As UInteger
      Dim crc As UInteger = &HffffffffUI
      For i As Integer = 0 To bytes.Length - 1
         Dim index As Byte = CByte(((crc) And &Hff) Xor bytes(i))
         crc = CUInt((crc >> 8) Xor table(index))
      Next
      Return Not crc
   End Function
End Class

【问题讨论】:

  • Dump() 似乎只是为了输出结果(用于测试?)。其余代码是否编译?
  • 这段代码将无法编译,因为“Dump”不是属于 UInteger 的函数。你能提供原始代码的链接吗?您复制的内容可能不正确或不完整。 (或者作者只是想让它成为伪代码)
  • 如果您对代码的理解程度不足以重写 Main 中的行,因此它不需要 Dump 方法,您可能不应该使用它。
  • 您能否将链接添加到您获得代码的网站?我想应该有一个链接,因为你说“这个网站”?
  • 这是页面底部的网站,您可以找到“Magnus”的代码:stackoverflow.com/questions/15553697/…

标签: vb.net crc32


【解决方案1】:

如果你从其他地方复制了这个,那么我猜Dump 是一种扩展方法,可以做类似Debug.Print 之类的事情

尝试替换这个:

Crc32.ComputeChecksum(Encoding.UTF8.GetBytes("Some string")).Dump()

有了这个:

Debug.Print(Crc32.ComputeChecksum(Encoding.UTF8.GetBytes("Some string")))

【讨论】:

  • 谢谢马特。您的修改消除了错误消息,但我看不到代码产生的结果。我可以看到正在返回的 CRC 值吗?
  • 它应该打印到输出(或可能立即)窗口中(如果您正在运行调试构建)
  • 我期待在立即或输出窗口中看到 CRC 字节,但显然什么都没有。
  • 这是另一个问题(我确定之前有人问过这个问题,所以只需 google 一下),要查看您的校验和,只需将其显示在 MsgBox
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2012-02-22
  • 2023-03-03
  • 2017-10-02
  • 2016-07-10
相关资源
最近更新 更多