Почему этот код CRC-32 не работает в Visual Basic?

Я новичок в 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

person Jamy codes    schedule 23.07.2014    source источник
comment
Кажется, что Dump() существует только для вывода результата (для тестирования?). Остальной код компилируется?   -  person Joachim Isaksson    schedule 23.07.2014
comment
Этот код не будет компилироваться, потому что Dump не является функцией, принадлежащей UInteger. Можете дать ссылку на исходный код? Возможно, вы скопировали что-то неправильно или не полностью. (Или автор просто хотел, чтобы это был псевдокод)   -  person Alex    schedule 23.07.2014
comment
Если вы недостаточно понимаете код, чтобы переписать строку в Main, чтобы метод Dump не нуждался в нем, вам, вероятно, не следует его использовать.   -  person nvoigt    schedule 23.07.2014
comment
Не могли бы вы добавить ссылку на сайт, с которого вы получили код, пожалуйста? Я предполагаю, что должна была быть ссылка, так как вы сказали этот сайт?   -  person yu_ominae    schedule 23.07.2014
comment
Это веб-сайт внизу страницы, где вы найдете код Магнуса: stackoverflow.com/questions/15553697/   -  person Jamy codes    schedule 23.07.2014


Ответы (1)


Если вы скопировали это откуда-то еще, то я предполагаю, что Dump - это метод расширения, позволяющий сделать что-то вроде Debug.Print

Попробуйте заменить это:

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

С этим:

Debug.Print(Crc32.ComputeChecksum(Encoding.UTF8.GetBytes("Some string")))
person Matt Wilko    schedule 23.07.2014
comment
Спасибо, Мэтт. Ваша модификация избавилась от сообщения об ошибке, но я не вижу результата, который выдает код. Могу ли я увидеть возвращаемое значение CRC? - person Jamy codes; 23.07.2014
comment
Он должен печатать в окне вывода (или, возможно, сразу) (если вы используете отладочную сборку) - person Matt Wilko; 23.07.2014
comment
Я ожидал увидеть байты CRC в непосредственном окне или окне вывода, но, видимо, ничего. - person Jamy codes; 23.07.2014
comment
Это еще один вопрос (который, я уверен, уже задавали раньше, поэтому просто погуглите), чтобы увидеть контрольную сумму, просто покажите ее в виде MsgBox - person Matt Wilko; 23.07.2014