COM APIを使用している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をいじり回して、基本タイプがSystem.ArrayのByte []を探していることがわかりました。
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
私がやろうとしていることは、$ bytesを$ r.dataと同じ型に変換することです。何らかの理由で、$ bytesはObject []として作成されています。 Byte []にキャストするにはどうすればよいですか?
それをバイト配列にキャストします。
[byte[]]$bytes = Get-Content $file -Encoding byte
この回答は、文脈のない質問に対するものです。検索結果のために追加しています。
[System.Byte[]]::CreateInstance([System.Byte],<Length>)
PS 5.1では、これ:
[System.Byte[]]::CreateInstance(<Length>)
うまくいきませんでした。だから代わりに私はやった:
new-object byte[] 4
その結果、空のバイトが生じました[4]:
0
0
0
0
おそらくもっと多くの方法がありますが、これらは私が考えることができるものです:
アレイの直接初期化:
[byte[]] $b = 1,2,3,4,5
$b = [byte]1,2,3,4,5
$b = @([byte]1,2,3,4,5)
$b = [byte]1..5
ゼロで初期化された配列を作成する
$b = [System.Array]::CreateInstance([byte],5)
$b = [byte[]]::new(5) # Powershell v5+
$b = New-Object byte[] 5
$b = New-Object -TypeName byte[] -Args 5
byte[]
の配列が必要な場合(2次元配列)
# 5 by 5
[byte[,]] $b = [System.Array]::CreateInstance([byte],@(5,5)) # @() optional for 2D and 3D
[byte[,]] $b = [byte[,]]::new(5,5)
さらに:
# 3-D
[byte[,,]] $b = [byte[,,]]::new(5,5,5)
[byte[,]] $b = [System.Array]::CreateInstance([byte],5,5,5)