我对此已经束手无策了。 我需要一个 32 个字符长的二进制字符串在 powershell 中转换为十六进制。例如:“000010000000001111101000100010”
我一直得到“对于 Int64 来说值要么太大要么太小”。或 INT32,具体取决于我使用哪个。
在powershell中有什么好的方法可以做到这一点吗? 我一直这样运行:
"$updatedHexsize = [转换]::ToInt64("000010000000001111101000100010",10)"
也许有手动方法?
Santiago Squarzon在评论中提供了解决方案:
使用
2
,而不是 10
,作为 [Convert]::ToInt64()
调用中的数字基参数,以匹配输入字符串表示形式的基数,然后将数字结果重新格式化为 十六进制字符串(基数16
,带
.ToString('X')
):
# -> '200FA22'
[Convert]::ToInt64('000010000000001111101000100010', 2).ToString('X')
替代方案,通过 -f
,格式运算符,带有
0x
前缀:
# -> '0x200FA22'
'0x{0:X}' -f [Convert]::ToInt64('000010000000001111101000100010', 2)
0x
按字面意思使用,
{0:X}
是第一个(仅限此处)操作数的占位符(如果不应用格式,则为
{0}
),
X
是标准数字格式字符串,请求十六进制格式(使用大写十六进制数字;使用
x
表示小写)。
我认为参数 [
10
,改为上面的2
] 告诉系统将值转换为什么 Base。
System.Int64
)并且一个数字具有no内在基数。
基数仅在选择人类可读的数字表示时才发挥作用,必须作为字符串。
将给定的字符串表示形式转换回数字,必须指示为表示形式选择的基 - 要么“带外”,即通过单独的参数,如当前情况 - 或通过特定于基础的前缀。 PowerShell 支持数字
literals
0x
(基数
16
;例如 0xA
与十进制 10
相同)仅在 PowerShell (Core) 7+0b
用于 二进制数字(基数
2
;例如 0b10
与十进制 2
相同)。以两者都不是开头的数字文字被解释为 decimal数字(基数
10
type可以用类型说明符
l
中的10l
表示[long]
又名[System.Int64]
值) - 请参阅概念性about_Numeric_Literals帮助主题了解详细信息。
,如果目标类型是数字,则将其解析为 就像数字文字一样。因此,在 PowerShell 7+ 中,您可以执行以下操作:
# PowerShell 7+ only. Note the '0b' prefix.
# -> '200FA22'
([Int64] '0b000010000000001111101000100010').ToString('X')