在 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
我想颠倒这个数组中的字节顺序
$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