Так что, к сожалению, я должен признать, что я сдал 8-часовой поиск правильного кода CRC8 на языке программирования VBA. Есть много примеров, но пока я не нашел тот, который работает в моем случае. Итак, вот я, прошу вас о помощи, если кто-то может написать мне эту часть кода или если есть мистическая ссылка, на которую я не нажал.Расчет CRC8 в VBA
Объяснение:
AppID = "A00000039656434103F0154020D4000A"
В моем проекте, требуется, чтобы символ «А» в конце этого AppID, так как на основе этого CRC8 должен быть рассчитан. Если вы правильно поняли (потому что я, возможно, сошел с ума в течение всего дня, пытаясь написать эту функцию CRC8), у меня есть 32-byte
ID, на котором я хочу сделать проверку CRC8 на 16bits
(имеет ли это смысл?)
В приведенный пример, у меня есть только результат того, что CRC8 должен вернуться:
CRC8 = 0x6D
И мне нужно заменить нижний Nible с полукокса «А» в моей основной AppID:
FinalAppID = "A00000039656434103F0154020D4000D"
ПРОБЛЕМА: Но я просто не знаю, как писать и конвертировать коды из C++/C#. И я действительно был настроен поэтапно, но это не сработало.
Это код, я использую:
Public function calculateCRC8(ByVal AppID As String) As String
Dim CRC8 As Byte
Dim i as Integer
Dim j as Integer
Dim AppIDarray()
CRC8 = &HC7; //Based on preset 0xE3
aidLenght = LEN(AppID)
AppIDarray = StringToArray(AppID) ' I user a UDF that I wrote, this should work OK'
For j = 0 To aidLenght
CRC8 = CRC8 Xor AppIDarray(j)
For i = 1 To 8
If CRC8 And &H80 Then
CRC8 = (CRC8 * 2) Xor &H1D
Else
CRC8 = CRC8 * 2
End If
next i
Next j
calculateCRC8 = CRC8
End Function
Я не в офисе сейчас, так что, возможно, с опечатками в приведенном выше коде, или каких-то глупых ошибок, я написал это только сейчас, моя голова, когда я работал с ним целый день.
Проблемы, которая возникает с выше кодом:
Ошибка:
Error: Overflow!
Этой ошибка возникает, даже если я прохожу entire string
, или просто 16bits
. Такая же ошибка.
Если у кого-нибудь есть что-нибудь, чтобы помочь мне здесь, я буду ему очень благодарен!
Знаете ли вы, какая линия вызывает переполнение? Вы уверены, что ваш UDF работает нормально? – James
К сожалению, еще не @James Я не такой хороший VBA, только недавно начал писать код, только из-за этого «маленького» проекта, как мне сказали. Я еще не очень хорош в отладке. Но, когда я MsgBox-ed CRC8 .. У меня появилось странное число .. как большие отрицательные числа. Я снова проверю функцию StringToArray.но я думаю, что все работает нормально, я проверил некоторые тесты. Я также пытался отключить сообщение об ошибке, но я не могу найти способ сделать это? У меня нет этого Solution Explorer, который упоминается в каждой ссылке в Интернете, когда я ищу, как отключить его. –
Это интересный вопрос, но вам действительно нужно заменить его на *** *** *** код и сообщить нам, где происходит ошибка. – RubberDuck