powershell 中的类型转换字节
Typecast bytes in powershell
在 C 中,我有以下代码
struct _file_header* file_header = (struct _file_header*)(cfg_bytes + (cfg_size - 16));
这有效地用内存中的字节填充了 _file_header
结构。我想在 Powershell 中做同样的事情,但我对 [System.Text.Encoding]::ASCII.GetBytes
返回一些与我在 cfg_bytes
中看到的数据无关的字节感到困惑
采用以下PowerShell代码,
$cfg_bytes = (Get-Content $env:ProgramData'\config.bin' -Raw)
$cfg_size = [System.Text.Encoding]::ASCI.GetByteCount($cfg_bytes)
$file_header = $cfg_bytes.Substring($cfg_size - 16, 16)
当我 Write-Output [System.Text.Encoding]::ASCII.GetBytes($file_header)
时,输出与我从调试器内存查看器中看到的不同。我怎样才能获得与 C 示例格式相同的字节,以便我能够在 PowerShell 中读取相同的结构?
作为Santiago Squarzon
建议,使用以下命令在 PowerShell 中直接获取文件的 原始字节 :
- 在 Windows PowerShell:
$cfg_bytes = Get-Content -Encoding Byte -Raw $env:ProgramData\config.bin
- 在 PowerShell(核心)7+:
$cfg_bytes = Get-Content -AsByteStream -Raw $env:ProgramData\config.bin
注意:两个 PowerShell 版本之间语法的这种重大变化是不幸的,并且可以说本不应该发生 - 参见 GitHub issue #7986.
请注意,将 -Raw
添加到 Get-Content
调用 - 当与 -Encoding Byte
/ -AsByteStream
结合时 - 有效地 returns 所有字节 作为单个数组 ,强类型为 [byte[]]
.
如果没有 -Raw
,字节将被 流式处理 - 即输出到管道 一个一个 - 其中,如果未累积输出,则保持内存使用不变 - 但速度要慢得多。
在 C 中,我有以下代码
struct _file_header* file_header = (struct _file_header*)(cfg_bytes + (cfg_size - 16));
这有效地用内存中的字节填充了 _file_header
结构。我想在 Powershell 中做同样的事情,但我对 [System.Text.Encoding]::ASCII.GetBytes
返回一些与我在 cfg_bytes
采用以下PowerShell代码,
$cfg_bytes = (Get-Content $env:ProgramData'\config.bin' -Raw)
$cfg_size = [System.Text.Encoding]::ASCI.GetByteCount($cfg_bytes)
$file_header = $cfg_bytes.Substring($cfg_size - 16, 16)
当我 Write-Output [System.Text.Encoding]::ASCII.GetBytes($file_header)
时,输出与我从调试器内存查看器中看到的不同。我怎样才能获得与 C 示例格式相同的字节,以便我能够在 PowerShell 中读取相同的结构?
作为Santiago Squarzon 建议,使用以下命令在 PowerShell 中直接获取文件的 原始字节 :
- 在 Windows PowerShell:
$cfg_bytes = Get-Content -Encoding Byte -Raw $env:ProgramData\config.bin
- 在 PowerShell(核心)7+:
$cfg_bytes = Get-Content -AsByteStream -Raw $env:ProgramData\config.bin
注意:两个 PowerShell 版本之间语法的这种重大变化是不幸的,并且可以说本不应该发生 - 参见 GitHub issue #7986.
请注意,将 -Raw
添加到 Get-Content
调用 - 当与 -Encoding Byte
/ -AsByteStream
结合时 - 有效地 returns 所有字节 作为单个数组 ,强类型为 [byte[]]
.
如果没有 -Raw
,字节将被 流式处理 - 即输出到管道 一个一个 - 其中,如果未累积输出,则保持内存使用不变 - 但速度要慢得多。