我有一些使用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 []?
答案 0 :(得分:15)
这个答案是关于没有背景的问题。我是因为搜索结果而添加的。
[System.Byte[]]::CreateInstance([System.Byte],<Length>)
答案 1 :(得分:14)
将其转换为字节数组:
[byte[]]$bytes = Get-Content $file -Encoding byte
答案 2 :(得分:13)
在PS 5.1中,这个:
new-object byte[] 4
对我不起作用。所以我做了:
<强> 0
0
0
0
强>
导致空字节[4]:
{{1}}
答案 3 :(得分: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[]
数组(二维数组)
# 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)
答案 4 :(得分:-1)
如果您只想将任意字符串编码为byte []数组,则为FWIW:
$foo = "This is a string"
[byte[]]$bar = $foo.ToCharArray()