如何在 PowerShell 中将字节数组显示为十六进制数字的连接字符串?

如何在 PowerShell 中将字节数组显示为十六进制数字的连接字符串?

我正在使用 WMI 查找 HBA 卡上端口的 WWN(全球通用名称)。我可以找回 WWN,但它包含一个 8 字节数组。我想将此字节数组转换为 16 个十六进制数字的字符串,以便于显示。

这是我用来打印出每行数字的查询。有没有办法将其转换为将 8 行合并到一行?

gwmi -namespace root\wmi -class MSFC_FibrePortNPIVAttributes | select -expand WWPN | foreach { $_.ToString("X2") }

我认为以下内容可以仅使用字节数据进行测试,但我对 PowerShell 还不熟悉。

[byte[]] 1,2,3,4,5,6,7,8 | foreach { $_.ToString("X2") }

答案1

以下是几种方法(我相信还有其他方法):

[byte[]](1,2,3,4,5,6,7,8) | foreach { $string = $string + $_.ToString("X2") }
Write-Output $string

或者

-join ([byte[]](1,2,3,4,5,6,7,8) |  foreach {$_.ToString("X2") } )

或者

([byte[]](1,2,3,4,5,6,7,8) |  foreach { $_.ToString("X2") }) -join ""

以上每个操作的输出:

0102030405060708

答案2

你可以这样做:

[System.BitConverter]::ToString([Byte[]](1,2,3,4,5,6,7,8)) -replace "-"

具体如下:

[Byte[]](1,2,3,4,5,6,7,8)

这将创建一个具有 8 个元素的 ByteArray,每个元素分别包含值 1 到 8。

[System.BitConverter]::ToString(<ByteArray type Object>)

这会将 ByteArray 转换为破折号分隔的字符串,如下所示:

01-02-03-04-05-06-07-08

最后,

-replace "-"

这将删除破折号。

相关内容