Конвертировать hex в base64 в Excel - PullRequest
1 голос
/ 16 апреля 2019

Я знаю, что уже существует тема с тем же именем Преобразование шестнадцатеричной строки в base64 в функции Excel Однако я не получаю тот же результат, который ожидаю от VBA, предоставленной в потоке.Я использую этот веб-сайт, и он дает правильный ответ https://cryptii.com/pipes/base64-to-hex

Похоже, что в результате, предоставленном Hex2Base64, есть 12 ненужных символов.Как заставить его работать как веб-сайт?

Я знаю, что есть простое решение для ввода в другую ячейку что-то вроде: =LEFT(cell;20), но как это можно сделать с текущим VBA?

ИтакУ меня есть:

HEX: 01 00 00 00 05 00 00 00 00 E3 07 04 00 0F 00

На сайте я получаю BASE64: AQAAAAUAAAAA4wcEAA8A

enter image description here

По предоставленному решению в уже существующей теме я получаю BASE64: AQAAAAUAAAAA4wcEAA8AAAAAAAAAAA==

Function Hex2Base64(byVal strHex)
    Dim arrBytes
    If Len(strHex) Mod 2 <> 0 Then
        strHex = Left(strHex, Len(strHex) - 1) & "0" & Right(strHex, 1)
    End If
    With CreateObject("Microsoft.XMLDOM").createElement("objNode")
        .DataType = "bin.hex"
        .Text = strHex
        arrBytes = .nodeTypedValue
    End With
    With CreateObject("Microsoft.XMLDOM").createElement("objNode")
        .DataType = "bin.base64"
        .nodeTypedValue = arrBytes
        Hex2Base64 = .Text
    End With
End Function

1 Ответ

2 голосов
/ 16 апреля 2019

Проблема с входным параметром - шестнадцатеричная строка с пробелами. Удаление пробелов дает ожидаемые результаты:

Debug.Print Hex2Base64(Replace("01 00 00 00 05 00 00 00 00 E3 07 04 00 0F 00", " ",""))
...