如何声明无符号的32位整数?

Pat*_*ick 8 powershell

有没有办法在PowerShell中声明一个32位无符号整数?

我试图添加一个无符号(开头0xf)ie 0xff000000 + 0xAA,但它结果是一个负数,而我希望它是0xff00000AA.

Pen*_*hev 14

当前接受的答案中的代码导致我的系统出现以下错误: 在此输入图像描述

这是因为Powershell总是首先尝试将十六进制值转换为int,因此即使您转换为uint64,如果数字具有负的int值,环境也会抱怨.您可以从以下示例中看到:

PS C:\> [uint64] (-1)
Cannot convert value "-1" to type "System.UInt64". Error: "Value was either too large or too small for a UInt64."
At line:1 char:26
+ Invoke-Expression $ENUS; [uint64] (-1)
+                          ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastIConvertible
Run Code Online (Sandbox Code Playgroud)

您需要将数字的字符串表示形式转换为uint64以避免这种情况:

[uint64]"0xff000000" + [uint64]"0xAA"
Run Code Online (Sandbox Code Playgroud)

  • @SpellingD:不同之处是Pencho使用`0xFF0000AA`(四个零)来获得一个有符号的`Int32`负值(无法转换为无符号值),其中问题使用`0xFF00000AA`(五个零)来获得签名`Int64`正值(成功转换). (2认同)

Sha*_*evy 7

对于32位无符号整数,0xff00000AA太大,请使用uint64

PS> [uint64]0xff00000AA
68451041450
Run Code Online (Sandbox Code Playgroud)

  • 这不回答_actually_ ask的问题,即如何声明无符号的32位整数,文本的其余部分暗示设置了高位.Pencho _does_提供的答案提供了一种方法.鉴于所提出的问题,假设提供的示例只有比预期更多的十六进制数字并且_not_它对于32位整数(有符号或其他)来说"太大"似乎是合理的. (2认同)