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


5

我正在使用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") }

Answers:


5

这里有几种方法(我敢肯定还有其他方法):

[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

这引导我走正确的道路。我最终得到了满足我需要的以下命令。gwmi-命名空间root \ wmi -class MSFC_FibrePortNPIVAttributes | 选择WWPN | foreach {[array] :: Reverse($ _。WWPN); [BitConverter] ::: ToUInt64($ _。WWPN,0).ToString(“ X”)}
杰森(Jason

3

一种可能的方式是这样的:

[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 "-"

这将删除破折号。


1
您能解释一下这是什么吗?
Burgi

1
尽管这可以回答问题,但是如果您可以提供解释为什么会这样做会更好。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.