在 PowerShell 中反转字节顺序

Reversing byte order in PowerShell

我想颠倒这个数组中的字节顺序

$cfg = ($cfg | ForEach-Object ToString X2)

我试过了

$cfg = [Array]::Reverse($cfg)

但是在

之后
Write-Output $cfg

没有生成输出。我该如何解决这个问题?

注意:下面的答案解决了反转给定数组元素的问题,无论它们是什么类型。您问题中的命令创建了一个 strings 数组,而不是 bytes。如果您想将这些字符串解释为 字节值 ,您必须使用:[byte[]] $cfg = ($cfg | ForEach-Object ToString X2) -replace '^', '0x'
也就是说,鉴于您的命令暗示 $cfg 的元素已经是 numbers
[byte[]] $cfg = $cfg应该可以。

[Array]::Reverse() 反转数组 就地 并且 没有 return 值 .

因此,仅使用 [Array]::Reverse($cfg) 本身 - 之后,$cfg 将以相反的顺序包含原始数组元素。

一个简单的例子:

$a = 1, 2, 3

# Reverse the array in place.
[Array]::Reverse($a)

# Output the reversed array -> 3, 2, 1
$a 

如果您尝试将字节数组转换为 LittleEndian 顺序或“向后”的整数...(基于 Powershell Byte array to INT

[bitconverter]::ToInt16   # without parentheses to get declaration

OverloadDefinitions
-------------------
static int16 ToInt16(byte[] value, int startIndex)


$bytes = [byte[]](0xde,0x07)
$startIndex = 0

[bitconverter]::ToInt16($bytes,$startIndex)
2014

2014 | % tostring x4
07de                     # bytes are backwards

[bitconverter]::IsLittleEndian   # Windows, OSX, Linux...
True