And*_*der 20 arrays powershell byte
我有一些使用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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
我想要做的是将$ bytes转换为与$ r.data相同的类型.由于某种原因,$ bytes被创建为Object [].如何将其转换为Byte []?
Slo*_*ire 24
这个答案是针对没有背景的问题.我正在添加它,因为搜索结果.
[System.Byte[]]::CreateInstance([System.Byte],<Length>)
Run Code Online (Sandbox Code Playgroud)
Ans*_*ers 17
将其转换为字节数组:
[byte[]]$bytes = Get-Content $file -Encoding byte
Run Code Online (Sandbox Code Playgroud)
And*_*rew 17
在PS 5.1中,这个:
[System.Byte[]]::CreateInstance(<Length>)
不适合我.所以相反,我做了:
new-object byte[] 4
这导致了一个空字节[4]:
0
0
0
0
Run Code Online (Sandbox Code Playgroud)
Yen*_*ang 15
可能还有更多的方法,但这些是我能想到的:
直接数组初始化:
[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
Run Code Online (Sandbox Code Playgroud)
创建一个零初始化数组
$b = [System.Array]::CreateInstance([byte],5)
$b = [byte[]]::new(5) # Powershell v5+
$b = New-Object byte[] 5
$b = New-Object -TypeName byte[] -Args 5
Run Code Online (Sandbox Code Playgroud)
如果你想要一个byte[](二维数组)的数组
# 5 by 5
[byte[,]] $b = [System.Array]::CreateInstance([byte],@(5,5)) # @() optional for 2D and 3D
[byte[,]] $b = [byte[,]]::new(5,5)
Run Code Online (Sandbox Code Playgroud)
此外:
# 3-D
[byte[,,]] $b = [byte[,,]]::new(5,5,5)
[byte[,]] $b = [System.Array]::CreateInstance([byte],5,5,5)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34616 次 |
| 最近记录: |