在PowerShell中创建Byte []

时间:2013-07-04 15:42:59

标签: 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

使用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 []?

5 个答案:

答案 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()