什么';在Powershell中将无符号整数初始化为0xFFFFFF的正确方法是什么?

什么';在Powershell中将无符号整数初始化为0xFFFFFF的正确方法是什么?,powershell,Powershell,我的CRC计算算法要求我将一个32位无符号整数变量初始化为0xFFFFFF(所有1都是二进制的,以便我可以将该变量用作位掩码)。如果我只写[uint32]$r=0xFFFFFFFF,我会收到以下错误消息: 无法将值“-1”转换为类型“System.UInt32”。错误:“UInt32的值太大或太小。” 我目前使用的语法是[uint32]$r=“0xFFFFFFFF”,但字符串到整数的转换似乎有点过头了(我来自C/C++编程世界)。我对Powershell非常陌生,所以我想知道Powershell

我的CRC计算算法要求我将一个32位无符号整数变量初始化为0xFFFFFF(所有1都是二进制的,以便我可以将该变量用作位掩码)。如果我只写
[uint32]$r=0xFFFFFFFF
,我会收到以下错误消息:

无法将值“-1”转换为类型“System.UInt32”。错误:“UInt32的值太大或太小。”


我目前使用的语法是
[uint32]$r=“0xFFFFFFFF”
,但字符串到整数的转换似乎有点过头了(我来自C/C++编程世界)。我对Powershell非常陌生,所以我想知道Powershell是否有一种更有效/更直接的方法来初始化这样的变量。

关于
[UInt32]::MaxValue
如何


该常数的值为4294967295;也就是说,十六进制0xFFFFFF。

PowerShell没有任何
UInt32
文字的语法,但您可以使用以下命令将
Int64
文字强制转换为
[UInt32]


您可以使用
[UInt32]“0xFFFFFFFF”
-为什么是“超过顶部”?您不需要字符串。PowerShell将
0xFFFFFF
解释为十六进制值。是的,但您不能在没有引号的情况下直接转换为
UInt32
,因为
0xFFFFFF
首先转换为右侧的
Int
-1
。引号避免了右侧强制转换,并允许左侧强制转换工作。这可以通过以下代码段进行验证:
'{0:x}'-f[UInt32]::MaxValue
[uint32]0xFFFFFFFFl