Arrays 用其他阵列替换部分阵列的最简单方法?(将二进制数据修补到文件中)

Arrays 用其他阵列替换部分阵列的最简单方法?(将二进制数据修补到文件中),arrays,powershell,variable-assignment,Arrays,Powershell,Variable Assignment,要使用PS将二进制数据块修补到文件中,这是我想到的最好方法(为了简洁起见,所有内容都是硬编码的): 这是可行的,但在数组上做这类事情难道没有更简单的方法吗?例如,对于每次替换元素(这里是字节)的循环,只使用一个操作符或调用而不使用 对于PowerShell中的所有高级功能,我希望会有类似于C中的-replaceop或memcpy()的版本,或者是$b=$a | foreach{$}强制按val而不是按ref数组赋值的技巧,或者是这样(失败的): 第二个注意事项是,我注意到像这样的示例中经常使用@

要使用PS将二进制数据块修补到文件中,这是我想到的最好方法(为了简洁起见,所有内容都是硬编码的):

这是可行的,但在数组上做这类事情难道没有更简单的方法吗?例如,对于每次替换元素(这里是字节)的
循环,只使用一个操作符或调用而不使用

对于PowerShell中的所有高级功能,我希望会有类似于C中的
-replace
op或
memcpy()
的版本,或者是
$b=$a | foreach{$}
强制按val而不是按ref数组赋值的技巧,或者是这样(失败的):

第二个注意事项是,我注意到像这样的示例中经常使用
@()
数组运算符,尽管不是必需的。是否有这样的论点?

您可以使用以下方法:

从指定的目标数组索引开始,将当前一维数组的所有元素复制到指定的一维数组


有些情况下需要使用
@()
,例如,如果需要确保子表达式的结果是数组,而不管返回多少项。看见
$bytes = [IO.File]::ReadAllBytes("FILE.DAT")
for ($i = 0; $i -lt 7; $i++) {
    $bytes[73 + $i] = (0xCD, 0xCD, 0xCD, 0xA7, 0x91, 0xAB, 0xD2)[$i]
}
[IO.File]::WriteAllBytes("FILE.DAT", $bytes)
$bytes[73..79] = 0xCD, 0xCD, 0xCD, 0xA7, 0x91, 0xAB, 0xD2  # "Array assignment ... failed because assignment to slices is not supported"
([byte[]](0xCD, 0xCD, 0xCD, 0xA7, 0x91, 0xAB, 0xD2)).CopyTo($bytes,73)