【问题标题】:How to append binary values in VBScript如何在 VBScript 中附加二进制值
【发布时间】:2010-09-16 02:55:35
【问题描述】:

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

当您尝试使用“&”运算符加入时,VBScript 会抱怨类型不匹配。

【问题讨论】:

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

标签: vbscript binary


【解决方案1】:

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 检索结果数组。

【讨论】:

    【解决方案2】:

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

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

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

    感谢您的反馈。

    【讨论】:

      【解决方案3】:

      也许……

      result = CStr(val1) & CStr(val2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-07
        • 2010-12-05
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多