GUID的十六进制转换会删除零?

时间:2018-01-17 23:03:56

标签: powershell hex guid

我有一个脚本,它接受GUID的十六进制值并转换为GUID。然而,它正在删除例如零。这是我的输出。并且reg读取十六进制值。

$GUIDLocal1 = (Get-ItemProperty "$Reg\Common Api")."UniqueID"
$GUIDLocal2 = (Get-ItemProperty "$Reg\Test\Common Api")."UniqueID"

# This is not code below just info
$GUIDLocal1 is 54 171 225 63 61 204 14 79 168 61 49 246 193 140 121 152
$GUIdlocal2 is 54 171 225 63 61 204 14 79 168 61 49 246 193 140 121 152
ID in Database is              36ABE13F3DCC0E4FA83D31F6C18C7998
$guidinhex                     36ABE13F3DCCE4FA83D31F6C18C7998
$guidinhex2                    36ABE13F3DCCE4FA83D31F6C18C7998
# This is not code above just info 

我正在使用此代码进行转换

$guidinHex = [string]::Empty
$guidinHex2 = [string]::Empty
$GUIDLocal1 | % { $guidInHEX += '{0:X}' -f [int]$_ }
$GUIDLocal2 | % { $guidInHEX2 += '{0:X}' -f [int]$_ }

ID为GUID,其中删除了所有{}-,以便于查看。 $GUIDLocal1$GUIDLocal2是注册表中的十六进制值。

然后我使用上面的代码进行转换($GUIDLocal1$GUIDLocal2是guidinhex / 2的值。

转换有效,但是如果有零则会将其剥离,如上所示 - 这台机器的GUID实际上与reg值匹配,但我的转换是偏向结果我只需要知道为什么以及如何不具备转换删除Zero / s。

我认为添加[int]会有所帮助,但无济于事。

1 个答案:

答案 0 :(得分:0)

-f(格式)运算符允许您将数值格式化为带前导零的十六进制字符串。格式规范为{0:Xn}{0:xn},其中 n 是字符串输出中所需的位数(如果需要,用零填充)。大写X或小写x指定是否希望十六进制值AF为大写或小写。例子:

"{0:X2}" -f 15   # outputs string 0F
"{0:X3}" -f 27   # outputs string 01B
"{0:x4}" -f 254  # outputs string 00fe

......等等。文档:

https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings#XFormatString