我正在尝试从数据库理解和提取数据。关键信息似乎在其中一个表中编码为十六进制字符串。当我试图将其转换为ASCII时,它给了我胡言乱语。还有其他与此数据库结合使用的文件,我相信这些文件被编码为 Unicode UTF-16。所以我想尝试将这个十六进制字符串转换为 UTF-16,看看它是什么样子的。
有人可以帮助我弄清楚如何在Powershell中执行此操作吗?
谢谢
假设您的字符串由偶数个十六进制字符组成,您可以在每 2 个字符后插入一个分隔符字符,删除尾随分隔符(以免生成尾随空元素(,然后在分隔符处拆分字符串。
$s = 'a3422b4a'
$s -replace '..', '$&:' -replace ':$' -split ':'
然后将生成的片段转换为字节:
... | ForEach-Object { [byte]"0x$_" }
收集变量中的字节数组并将其转换为 Unicode 字符串:
[Text.Encoding]::Unicode.GetString($bytes)
[Text.Encoding]::Unicode
是 UTF-16 LE。如果需要 UTF-16 BE,请使用[Text.Encoding]::BigEndianUnicode
。
编辑:再三考虑,您甚至不需要转换循环。您可以在每对十六进制字符之前插入0x
,并将字符串拆分为字符,后跟序列0x
,然后将生成的数组转换为字节数组。
[byte[]]($s -replace '..', '0x$&' -split '(?<=.)(?=0x)')