Как добавить двоичные значения в VBScript - PullRequest
0 голосов
/ 08 октября 2008

Если у меня есть две переменные, содержащие двоичные значения, как мне добавить их вместе как одно двоичное значение? Например, если я использовал WMI для чтения реестра двух значений REG_BINARY, я бы хотел иметь возможность объединить значения.

VBScript жалуется на несоответствие типов при попытке присоединиться с оператором '&'.

Ответы [ 3 ]

2 голосов
/ 09 октября 2008

Значение REG_BINARY будет возвращено в виде массива байтов. VBScript может ссылаться на массив байтов в переменной и может передавать этот массив байтов либо как вариант другой функции, либо как ссылку на массив байтов. Однако сам VBScript ничего не может сделать с массивом.

Вам понадобится какой-то другой компонент, чтобы выполнить конкатенацию: -

Function ConcatByteArrays(ra, rb)
    Dim oStream : Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1 'Binary'
    oStream.Write ra
    oStream.Write rb

    oStream.Position = 0

    ConcatByteArrays = oStream.Read(LenB(ra) + LenB(rb))
    oStream.Close

End Function

В приведенном выше коде я использую объект ADODB.Stream, который вездесущий на поддерживаемых в настоящее время платформах.

Если у вас действительно есть несколько массивов, которые вы хотите объединить, вы можете использовать следующий класс: -

Class ByteArrayBuilder
    Private moStream

    Sub Class_Initialize()
        Set moStream = CreateObject("ADODB.Stream")
        moStream.Open
        moStream.Type = 1
    End Sub

    Public Sub Append(rabyt)
        moStream.Write rabyt
    End Sub

    Public Property Get Length
        Length = moStream.Size
    End Property

    Public Function GetArray()
        moStream.Position = 0
        GetArray = moStream.Read(moStream.Size)
    End Function

    Sub Class_Terminate()
        moStream.Close
    End Sub

End Class

Вызовите append столько раз, сколько у вас есть массивов, и получите полученный массив с помощью GetArray.

1 голос
/ 18 октября 2008

Для записи, я хотел, чтобы код VBScript для большой базы пользователей использовался как сценарий входа в систему, который имеет наименьшую вероятность сбоя. Мне нравятся объекты ADO, но есть много таинственных способов, которыми ADO может быть сломан, поэтому я уклоняюсь от ADODB.Stream.

Вместо этого я смог написать код преобразования для преобразования двоичных в шестнадцатеричные строки. Затем, чтобы записать обратно значение REG_BINARY, я преобразую его в массив целых чисел и передам его методу SetBinaryValue WMI.

Примечание: WshShell может обрабатывать только REG_BINARY значений, содержащих 4 байта, поэтому его нельзя использовать.

Спасибо за отзыв.

0 голосов
/ 09 октября 2008

Возможно ...

result = CStr(val1) & CStr(val2)
...