2008-10-08 84 views
0

如果我有一個包含二進制值的兩個變量,我該如何追加他們一起作爲一個二進制值?例如,如果我使用WMI讀取兩個REG_BINARY值的註冊表,那麼我希望能夠連接這些值。類型不匹配的如何追加二進制值在VBScript

VBScript的抱怨,當你嘗試用「&」運營商加入。

+0

澄清你的意思是「二進制值」。上半年和下半年的JPG?當它們結合時,你應該擁有什麼? – 2008-10-08 20:02:44

回答

1

爲了記錄在案,我想VBScript代碼爲大的用戶羣爲具有失敗的機會最小登錄腳本。我喜歡ADO對象,但有很多神祕的方法可以打破ADO,所以我避開了ADODB.Stream。

相反,我能寫的轉換代碼,二進制轉換爲十六進制編碼字符串。然後,要回寫一個REG_BINARY值,我將它轉換爲一個整數數組,然後將其賦予SetBinaryValue WMI方法。

注意:WshShell只能處理包含4個字節的REG_BINARY值,所以無法使用。

感謝您的反饋。

0

也許...

result = CStr(val1) & CStr(val2) 
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 

呼叫追加多次,你有數組和檢索的的getArray結果數組。