Как найти контрольную сумму ряда «шестнадцатеричных» ячеек в VBA - PullRequest
0 голосов
/ 02 мая 2019

У меня есть 14 ячеек, которые содержат значения Hex - мне нужен способ вычисления контрольной суммы этих значений.Я знаю, что идея состоит в том, чтобы преобразовать все в десятичное число и добавить, затем преобразовать в двоичное и обратное, затем плюс 1, а затем снова преобразовать в шестнадцатеричное - однако я не уверен, как это сделать в VBA.Значения приведены ниже.

0011    E200    10E0    6C00    33E9    1F88    C080    1800    8001    3030    305A    4A39    3436    1624

1 Ответ

0 голосов
/ 02 мая 2019

Преобразование всех десятичных дробей и добавление:

Dim hexVal as String
Dim hexValtoLong as Double
Dim hexValToLongF as Double
'Alternatively can put everything in a loop and add together
hexValToLongF = 0
hexVal = "10E0"
hexValToDouble = cdbl("&H" & hexVal)
hexValToLongF = hexValToDouble + hexValToLongF
'... repeat

Преобразование десятичных чисел в двоичные:

Public Function DecToBin(ByVal theDec As Variant) As String
    Dim i As Long
    For i = 31 To 0 Step -1
        DecToBin = DecToBin & CStr(Int(theDec / (2 ^ i)))
        theDec = theDec - Int(theDec / (2 ^ i)) * (2 ^ i)
    Next i
End Function

источник: http://www.vbaexpress.com/forum/showthread.php?3599-Solved-Convert-Decimal-To-Binary


Инвертированная двоичная строка:

Public Function binverse(wCell As String) As String
    Dim x, y As Integer
    Dim nResult As String
    nResult = vbNullString
    x = Len(wCell)
    For y = 1 To x
        If Mid(wCell, y, 1) = "1" Then
           nResult = nResult & "0"
        Else
           nResult = nResult & "1"
        End If
    Next
    binverse = nResult
End Function

источник: https://www.excelforum.com/excel-general/551647-binary-inverse.html


Преобразование двоичного кода в дек:

Private Function Bin2Dec(Bin As String) As Long
    Dim TempVal As Long
    Dim RevI As Long
    Dim I As Long
        For I = Len(Bin) To 1 Step -1
            RevI = (Len(Bin) - I) + 1
            Debug.Print RevI
            If Mid(Bin, I, 1) = "1" Then TempVal = TempVal + (2 ^ (RevI - 1))
        Next I
        Bin2Dec = TempVal
End Function

источник: http://www.vbforums.com/showthread.php?213436-Addition-of-Binary-Numbers-in-VB


Затем добавьте один к нему и используйте предоставленную функцию в vba Hex(), чтобы преобразовать число обратно в гекс.Использование всего должно дать вам возможность выполнить то, что вы изначально изложили в своем посте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...