我正在尝试在PowerShell中复制以下Python代码段的功能:
allowed_mac_separators = [':', '-', '.']
for sep in allowed_mac_separators:
if sep in mac_address:
test = codecs.decode(mac_address.replace(sep, ''), 'hex')
b64_mac_address = codecs.encode(test, 'base64')
address = codecs.decode(b64_mac_address, 'utf-8').rstrip()
它接受一个MAC地址,去掉分隔符,将其转换为十六进制,然后转换为base64。(我没有编写Python函数,对它或其工作方式没有任何控制。)
例如,MAC地址
AA:BB:CC:DD:E2:00
将被转换为AABBCCDDE200
,然后转换为b'\xaa\xbb\xcc\xdd\xe2\x00'
,最后输出b'qrvM3eIA'
。我尝试了类似以下的操作:$bytes = 'AABBCCDDE200' | Format-Hex
[System.BitConverter]::ToString($bytes);
但是这会产生一个“MethodException:找不到重载为'ToString'且参数计数为'1'的方法。”我不太确定它在寻找什么。我找到的所有使用该调用的示例都只有一个参数。这个可以工作:
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('AABBCCDDE200'))
$bytes
的.Bytes
方法怎么样? 例如运行:[System.Convert]::ToBase64String($bytes.Bytes)
。 - undefined[System.Convert]
代码一样。 - undefined$bytes.Bytes
将修复您所见到的错误,但它等同于UTF8.GetBytes
方法。 - undefined.Bytes
,@Cpt.Whale;请注意,在Windows PowerShell中,它是有损的ASCII.GetBytes方法。 虽然在这种情况下这个区别并不重要,但请注意,在这种情况下使用.Bytes
是行不通的,因为你实际上会得到反映字符(如A)的ASCII码值的字节值,而需要的是将这些字符解释为十六进制数字。 - undefined