0

バイナリ値を含む 2 つの変数がある場合、それらを 1 つのバイナリ値として追加するにはどうすればよいですか? たとえば、WMI を使用して 2 つの REG_BINARY 値のレジストリを読み取った場合、値を連結できるようにしたいと考えています。

「&」演算子で結合しようとすると、VBScript は型の不一致を訴えます。

4

3 に答える 3

2

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を使用して結果の配列を取得します。

于 2008-10-09T08:03:39.207 に答える
1

記録のために、失敗する可能性が最も低いログオン スクリプトとして、大規模なユーザー ベース用の VBScript コードが必要でした。私は ADO オブジェクトが好きですが、ADO を壊す不可解な方法がたくさんあるので、ADODB.Stream は敬遠しています。

代わりに、2 進数を 16 進数にエンコードされた文字列に変換する変換コードを書くことができました。次に、REG_BINARY値に書き戻すために、それを整数の配列に変換し、SetBinaryValueWMI メソッドに渡します。

注: 4 バイトを含む値WshShellしか処理できないため、使用できません。REG_BINARY

フィードバックありがとうございます。

于 2008-10-17T20:28:46.363 に答える
0

多分...

result = CStr(val1) & CStr(val2)
于 2008-10-08T21:45:43.307 に答える