2013-07-04 13 views
11

Mam trochę kodu PowerShell, który używa interfejsu COM API. Otrzymuję błąd typu Mismatch, gdy przechodzę w tablicy bajtowej. Oto w jaki sposób tworzę tablicę, jak również informacje typuTworzenie Byte [] w 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 

wywiercenie z API, znalazłem, że szuka Byte [] o typie bazowym 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 

Co próbuję zrobić, to przekonwertować $ bajtów na ten sam typ co $ r.data. Z jakiegoś powodu, $ bytes jest tworzone jako Object []. Jak mogę przesłać go do bajta []?

Odpowiedz

13

wrzucił je do tablicy bajtów:

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

To odpowiedź na pytanie jest bez kontekstu. Dodaję go z powodu wyników wyszukiwania.

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

Dziękuję za to! zaoszczędziło mi sporo dodatkowego googlowania. –

+0

Nie działa dla mnie. Zobacz moją odpowiedź. – Andrew

+1

@Andrew, masz rację. Poprawiłem to. –

2

w PS 5.1, to:

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

nie działa dla mnie. Zamiast więc zrobiłem:

new-object byte[] 4

co spowodowało pusty bajt [4]: ​​

0 
0 
0 
0 
+1

To zadziałało dla mnie. –