如何在 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
我有以下类型 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