如何在VBScript中附加二进制值

如何在VBScript中附加二进制值,vbscript,binary,Vbscript,Binary,如果有两个变量包含二进制值,如何将它们作为一个二进制值附加在一起?例如,如果我使用WMI读取两个REG_二进制值的注册表,那么我希望能够连接这些值 VBScript在尝试使用“&”运算符联接时抱怨类型不匹配。可能 result = CStr(val1) & CStr(val2) 也许 result = CStr(val1) & CStr(val2) REG_二进制值将作为字节数组返回。VBScript可以引用变量中的字节数组,它可以将此字节数组作为变量传递给另一个函数或作为对

如果有两个变量包含二进制值,如何将它们作为一个二进制值附加在一起?例如,如果我使用WMI读取两个REG_二进制值的注册表,那么我希望能够连接这些值

VBScript在尝试使用“&”运算符联接时抱怨类型不匹配。

可能

result = CStr(val1) & CStr(val2)
也许

result = CStr(val1) & CStr(val2)

REG_二进制值将作为字节数组返回。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检索结果数组。

REG\u二进制值将作为字节数组返回。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检索结果数组。

作为记录,我希望使用VBScript代码作为登录脚本,使大型用户库的失败几率最小。我喜欢ADO对象,但是有很多神秘的方法可以破坏ADO,所以我避开ADODB.Stream

相反,我能够编写转换代码,将二进制编码字符串转换为十六进制编码字符串。然后,为了写回一个
REG_BINARY
值,我将其转换为一个整数数组,并将其交给
SetBinaryValue
WMI方法

注意:
WshShell
只能处理包含4个字节的
REG_BINARY
值,因此无法使用


感谢您的反馈。

作为记录,我想要一个大用户群的VBScript代码作为一个失败几率最小的登录脚本。我喜欢ADO对象,但是有很多神秘的方法可以破坏ADO,所以我避开ADODB.Stream

相反,我能够编写转换代码,将二进制编码字符串转换为十六进制编码字符串。然后,为了写回一个
REG_BINARY
值,我将其转换为一个整数数组,并将其交给
SetBinaryValue
WMI方法

注意:
WshShell
只能处理包含4个字节的
REG_BINARY
值,因此无法使用

感谢您的反馈。

澄清“二进制值”的含义。JPG的前半部分和后半部分?当它们结合在一起时,你应该有什么?澄清你所说的“二进制值”是什么意思。JPG的前半部分和后半部分?当它们结合在一起时,你应该有什么?