powershell – 如何将十六进制编码的字符串转换为十六进制整数

所以我基本上想要实现的是从文本文件中获取MAC地址并将值递增1.

一直在猛烈对抗Google / StackOverflow墙几个小时,认为这是一个我没有得到的概念.

电源外壳:

$Last_MAC_Address = (Get-Content -LiteralPath "\\UNC\Path\Last MAC Address.txt")

Write-Host ($Last_MAC_Address)
# Output: 00155DE10B73

$Next_MAC_Address = (($Last_MAC_Address | Format-Hex) + 1)
最佳答案
另一种选择是在值前加上0x并将其强制转换为int64:

$Next_MAC_Address = ([int64]"0x$Last_MAC_Address"+1).ToString('X12')

您也可以使用format operator(-f)而不是ToString()方法:

$Next_MAC_Address = '{0:X12}' -f ([int64]"0x$Last_MAC_Address"+1)

但是,有一件事值得注意. MAC addresses不仅是随机的6字节数字,没有任何内部结构.它们实际上由两部分组成.前3个字节构成Organizationally Unique Identifier(OUI),特定于供应商的前缀(00-15-5D是属于Microsoft的OUI之一).只有最后3个字节是随机数,是OUI标识的供应商的每张卡的唯一标识符.

考虑到这一点,您可能需要相应地拆分MAC地址,例如,像这样:

$oui, $nid = $Last_MAC_Address -split '(?<=^[0-9a-f]{6})(?=[0-9a-f]{6}$)'

或者像这样:

$oui = $Last_MAC_Address.Substring(0, 6)
$nid = $Last_MAC_Address.Substring(6, 6)

并且仅增加NIC标识符,并且仅当它不会溢出时:

if ($nid -ne 'ffffff') {
  $Next_MAC_Address = "{0}{1:X6}" -f $oui, ([int64]"0x$nid"+1)
} else {
  Write-Error 'MAC address overflow.'
}

转载注明原文:powershell – 如何将十六进制编码的字符串转换为十六进制整数 - 代码日志