PowerShell で 32 ビット符号なし整数を宣言する方法はありますか?
符号なし ( で始まる0xf
)を追加しようとし0xff000000 + 0xAA
ていますが、負の数であることが判明しました0xff0000AA
。
PowerShell で 32 ビット符号なし整数を宣言する方法はありますか?
符号なし ( で始まる0xf
)を追加しようとし0xff000000 + 0xAA
ていますが、負の数であることが判明しました0xff0000AA
。
現在受け入れられている回答のコードにより、システムで次のエラーが発生します。
これは、PowerShellが常に最初に16進値を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
uint64
これを回避するには、数値の文字列表現をキャストする必要があります。
[uint64]"0xff000000" + [uint64]"0xAA"
0xff00000AAは、32ビットの符号なし整数には大きすぎます。uint64を使用してください
PS> [uint64]0xff00000AA
68451041450
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)