programing

PowerShell에서 Byte[] 만들기

javamemo 2023. 10. 27. 21:40
반응형

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를 찾아보니 기본 유형의 시스템을 가진 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[]로 생성되고 있습니다.바이트[]에 캐스팅하려면 어떻게 해야 합니까?

이 답은 문맥이 없는 질문에 대한 것입니다.검색 결과 때문에 추가하는 겁니다.

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

아마 더 많은 방법이 있겠지만, 제가 생각할 수 있는 방법은 다음과 같습니다.

직접 배열 초기화:

[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-D 배열)

# 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)

PS 5.1에서는 다음과 같습니다.

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

저한테는 안 통했어요그래서 대신 했습니다.

new-object byte[] 4

빈 바이트[4]:

0
0
0
0

바이트 배열로 캐스트:

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

임의 문자열만 바이트[] 배열로 인코딩하려면 FWIW:

$foo = "This is a string"
[byte[]]$bar = $foo.ToCharArray()

언급URL : https://stackoverflow.com/questions/17474131/creating-byte-in-powershell

반응형