如果我有两个包含二进制值的变量,如何将它们作为一个二进制值附加在一起?例如,如果我使用 WMI 读取两个 REG_BINARY 值的注册表,那么我希望能够连接这些值。
当您尝试使用“&”运算符加入时,VBScript 会抱怨类型不匹配。
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 检索结果数组。
作为记录,我希望大型用户群的 VBScript 代码作为登录脚本失败的可能性最小。我喜欢 ADO 对象,但是有很多神秘的方式可以破坏 ADO,所以我回避了 ADODB.Stream。
相反,我能够编写转换代码将二进制转换为十六进制编码的字符串。然后,为了写回一个REG_BINARY
值,我将其转换为整数数组并将其提供给SetBinaryValue
WMI 方法。
注意:WshShell
只能处理REG_BINARY
包含 4 个字节的值,因此无法使用。
感谢您的反馈。
也许...
result = CStr(val1) & CStr(val2)