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

十六进制到十进制转换-PowerShell 5,powershell,hex,Powershell,Hex,出于某种原因,在将PowerShell中的某些值从十六进制转换为十进制时,我得到了不正确的值 例如: -键入0xc000000然后按enter键,您将得到-1073741824,这是不正确的,正确的值是322225472。给出的答案是我输入的负十六进制数的值ffffffffc000000 我认为这可能是一个解释问题,所以我明确要求将值从十六进制转换为十进制,但仍然得到了相同的错误答案-1073741824: [Convert]::ToString(0xc0000000,10) 为什么Power

出于某种原因,在将PowerShell中的某些值从十六进制转换为十进制时,我得到了不正确的值

例如: -键入
0xc000000
然后按enter键,您将得到
-1073741824
,这是不正确的,正确的值是
322225472
。给出的答案是我输入的负十六进制数的值
ffffffffc000000

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

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

为什么PowerShell将
0xc000000
解释为十六进制数
c000000
的负数?我在这里遗漏了什么吗?

这是PowerShell的问题(在早期版本中也存在)。当您实际希望该值为无符号整数时,该值将被解释为有符号整数。您需要像这样进行转换,以避开此问题:

[uint32]"0xC0000000"
Ansgar,但是一些关于发生了什么的解释可能是有趣的

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


您的情况是
0xC 12dec 1100 bin
。因此,由于第一位是1,位模式被解释为负值,结果是
-1073741824
。顺便说一句,这就是为什么某些Windows的错误消息包含无意义的负错误代码的原因。

这就是我所说的“解释为有符号整数”的基本意思;)谢谢你的回复。这就更清楚了为什么带符号的int被认为是负数,因为我认为最左边的第16位数字就是应该使用的数字,但读完这篇文章后,我现在明白了。Windows有时会做一些古怪的事情。