如何在 PowerShell 中将 UInt32 转换为(负)Int32?

How do I cast an UInt32 to a (negative) Int32 in PowerShell?

我有以下类型 System.UInt32:4.294.967.176(以字节为单位:FFFF FF88)。

我必须将此数字解释为 System.Int32 类型的数字,它将是:-120(仍以字节为单位:FFFF FF88)。

在 C 或 C++ 等语言中,简单的类型转换可以解决我的问题,但在 PowerShell 中进行类型转换:

[Int32][UInt32]4294967176

抛出错误:

Cannot convert value "4294967176" to type "System.Int32". Error: "Value was either too large or too small for an
Int32."
At line:1 char:1
+ [Int32][UInt32]4294967176
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastIConvertible

看起来 PowerShell 正在尝试“转换”值,而不是仅仅转换它。那么,我如何将 System.UInt32 转换为 System.Int32,这意味着不更改数据,而是使用另一个 interpretation/representation?

由于 .Net 数字数据类型支持转换为十六进制等效项,因此请先将 UInt32 转换为字符串。然后使用 System.Convert.ToInt32() 并将 hex 解析为 int。像这样,

$u = [UInt32]4294967176
$u.tostring('x')
ffffff88

# Convert hex based value to int
$i =  [convert]::toint32($u.tostring('x'), 16) 

# Check that type is int32
$i.GetType()
IsPublic IsSerial Name                             BaseType
-------- -------- ----                             --------
True     True     Int32                            System.ValueType

# Value    
$i
-120