2013-07-04 57 views
11

我有一些使用COM API的PowerShell代碼。我在傳入字節數組時遇到類型不匹配錯誤。這裏是我如何創建陣列,以及一些類型的信息在PowerShell中創建字節[]

PS C:\> $bytes = Get-Content $file -Encoding byte 
PS C:\> $bytes.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Object[]         System.Array 


PS C:\> $bytes[0].GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Byte          System.ValueType 

與API打交道了,我發現,它正在尋找一個byte []與基本類型的System.Array的。

PS C:\> $r.data.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Byte[]         System.Array 

PS C:\> $r.data[0].gettype() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Byte          System.ValueType 

我想要做的是將$字節轉換爲$ r.data相同的類型。出於某種原因,$字節被創建爲Object []。我如何將它轉換爲字節[]?

回答

13

其轉換爲字節數組:

[byte[]]$bytes = Get-Content $file -Encoding byte 
7

這個答案是沒有上下文的問題。由於搜索結果,我添加了它。

[System.Byte[]]::CreateInstance([System.Byte],<Length>) 
+1

感謝您給我們!救了我一堆額外的Google搜索 –

+0

沒有爲我工作。看到我的答案。 – Andrew

+1

@安德魯,你是對的。我糾正了它。 –

2

在PS 5.1,這樣的:

[System.Byte[]]::CreateInstance(<Length>)

並沒有爲我工作。所以不是我做的事:

new-object byte[] 4

這就造成了一個空字節[4]:

0 
0 
0 
0 
+1

這對我有用。 –