2016-07-25 244 views
1

出於某種原因,將PowerShell中的某些值從十六進制轉換爲十進制時,出現錯誤值。十進制到十六進制轉換 - PowerShell 5

例如: - 0xC0000000類型,然後按下回車鍵,你會得到-1073741824這是不正確,正確的價值是3221225472。給出的答案是我輸入的負十六進制數的值FFFFFFFFC0000000

我認爲這可能是一個解釋問題,所以我明確要求將值從Hex轉換爲Base10(小數),但我仍然得到相同的錯誤答案-1073741824

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

爲什麼PowerShell的解釋0xc0000000爲負的十六進制數c0000000?我在這裏錯過了什麼嗎?

回答

1

這是一個PowerShell問題(也存在於早期版本中)。當你真的希望它是一個無符號整數時,該值被解釋爲一個有符號整數。你需要做這樣的轉換來解決這個問題:

[uint32]"0xC0000000" 
+0

我明白了。這是有道理的。謝謝。 – RonaDona

2

安斯加爾already provided the work-around,但是這是怎麼回事了一些解釋可能會感興趣。

這種現象的根本原因是二元系統造成的。它並沒有真正的負數概念。只有一些:一系列和零。爲了將數字解釋爲正數或負數,已經發明creative trickery

你的情況是0xC <=> 12dec <=> 1100 bin。因此,第一位爲1時,位模式被解釋爲負值,因此得到-1073741824。順便說一下,這就是爲什麼某些Windows錯誤消息包含無意義的負面錯誤代碼的原因。

+0

這基本上是我的意思是「解釋爲一個有符號的整數」。 ;) –

+0

感謝您的回覆。這更清楚地表明爲什麼有符號整數被認爲是一個負數,因爲我認爲最左邊的第16位數字是被使用的,但是在閱讀完這些數字之後,我現在明白了。 Windows有時會做一些時髦的事情。 – RonaDona