2012-05-16 115 views

回答

5

0xff00000AA是太大一個32位無符號整數,使用UINT64

PS> [uint64]0xff00000AA 
68451041450 
+1

這不回答這個任務離子實際上被詢問,即如何聲明一個無符號的32位整數,其餘的文本暗示高位被設置。 Pencho提供的答案_does_提供了一種方法來做到這一點。在提出問題的情況下,假設所提供的示例只有更多的十六進制數字比預期的更好,並且_not_對於32位整數(有符號或其他)是「太大」似乎是合理的。 –

10

從目前接受的答案代碼導致我的系統上出現以下錯誤: enter image description here

這是因爲PowerShell的總是試圖爲十六進制值轉換s轉換爲int,所以即使你轉換爲uint64,如果該數字具有負的int值,環境也會投訴。 你需要轉換數字的字符串表示UINT64避免這種情況:

[uint64]"0xff000000" + [uint64]"0xAA" 
+0

我沒有得到你所描述的錯誤,而@Shay給出的答案對我來說很好。使用64位PSv2。 但是,只需輸入「0xff00000AA」,就不需要投射就自動轉換爲「68451041450」。 – SpellingD

+2

@SpellingD:不同的是Pencho使用'0xFF0000AA'(四個零)來獲得一個簽名的'Int32'負值(它無法轉換爲無符號值),其中問題使用'0xFF00000AA'(五個零)簽署'Int64'正值(成功轉換)。 –

+0

@EmperorXLII是的,就是這樣;接得好。 – SpellingD

0

我假設你的意思,因爲0xff0000AA,如其他人所說,0xff00000AA是溢出。

最簡單的方法是從字符串中轉換值。您可以使用System.Convert

[System.Convert]::ToUInt32('0xff0000AA',16) 
[System.Convert]::ToUInt32('ff0000AA',16) 

或者只是嘗試投的字符串,但在這種情況下,你需要預先0x

[uint32]'0xff0000AA' 

如果,另一方面,你真的想知道64位數字`0xff00000aa」的32位無符號整數部分,那麼你可以這樣做:

[System.Convert]::ToUInt32([System.Convert]::ToString(0xff00000AA -band ([uint32]::MaxValue),16),16) 
相關問題