十进制到十六进制转换 - PowerShell 5

时间:2016-07-25 12:13:44

标签: powershell hex

出于某种原因,将PowerShell中的某些值从Hex转换为Decimal时,我得到的值不正确。

例如: - 输入0xC0000000然后按Enter键,您将获得-1073741824这是不正确的,正确的值是3221225472。给出的答案是我输入的负十六进制数FFFFFFFFC0000000

的值

我认为这可能是一个解释问题所以我明确要求将值转换为Hex到Base10(十进制),我仍然得到相同的错误答案-1073741824

[Convert]::ToString(0xc0000000,10)

为什么PowerShell会将0xc0000000解释为十六进制数c0000000的否定值?我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

Ansgar already provided the work-around,但对正在发生的事情的一些解释可能会引起人们的兴趣。

这种现象的根本原因是由二元系统引起的。它实际上没有负数概念。只有位:系列的1和0。为了将数字解释为正数或负数,creative trickery已被发明。

您的情况会发生0xC <=> 12dec <=> 1100 bin。因此,当第一位为1时,位模式被解释为负值,结果得到-1073741824。顺便说一句,这就是为什么某些Windows的错误消息包含无意义的负面错误代码。

答案 1 :(得分:1)

这是一个PowerShell陷阱(也存在于早期版本中)。当您确实希望它是无符号整数时,该值将被解释为有符号整数。您需要像这样进行转换以解决问题:

[uint32]"0xC0000000"