由于某种原因,当将 PowerShell 中的某些值从十六进制转换为十进制时,我得到了不正确的值。
例如: - 输入
0xC0000000
然后按 Enter 键,您会得到 -1073741824
,这是不正确的,正确的值为 3221225472
。给出的答案是我输入的负十六进制数的值 FFFFFFFFC0000000
我认为这可能是一个解释问题,所以我明确要求将值从十六进制转换为 Base10(十进制),我仍然得到相同的错误答案
-1073741824
:
[Convert]::ToString(0xc0000000,10)
为什么 PowerShell 将
0xc0000000
解释为十六进制数 c0000000
的负数?我在这里错过了什么吗?
这是一个 PowerShell 陷阱(也存在于早期版本中)。当您实际上希望它是无符号整数时,该值会被解释为有符号整数。您需要进行这样的转换才能解决该问题:
[uint32]"0xC0000000"
因为我讨厌加速器:
$Hex="0x18"
[System.Convert]::ToInt32($Hex,16)
24
$Hex="18"
[System.Convert]::ToInt32($Hex,16)
24