Powershell 大二进制字符串转换为整数/十六进制

问题描述 投票:0回答:1

我对此已经束手无策了。 我需要一个 32 个字符长的二进制字符串在 powershell 中转换为十六进制。例如:“000010000000001111101000100010”

我一直得到“对于 Int64 来说值要么太大要么太小”。或 INT32,具体取决于我使用哪个。

在powershell中有什么好的方法可以做到这一点吗? 我一直这样运行:

"$updatedHexsize = [转换]::ToInt64("000010000000001111101000100010",10)"

也许有手动方法?

powershell binary hex number-formatting
1个回答
0
投票

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。

  • [Convert]::ToInt64()

    根据定义返回一个number(类型为System.Int64
    )并且
    一个数字具有no内在基数。

  • 基数仅在选择人类可读的数字表示时才发挥作用,必须作为字符串

  • 相反,为了
  • 明确地

    将给定的字符串表示形式转换回数字,必须指示为表示形式选择的 - 要么“带外”,即通过单独的参数,如当前情况 - 或通过特定于基础的前缀 PowerShell 支持数字

    literals
      中的两个基本前缀(不区分大小写),源代码中:
    • 0x
        表示
      • hex(十六进制)数字
        (基数 
        16;例如 0xA
        与十进制
        10
        相同)
        仅在 
        PowerShell (Core) 7+
      • 中:0b 用于 二进制数字
        (基数 
        2;例如 0b10
        与十进制
        2
        相同)。
        以两者都不是开头的数字文字被解释为 
        decimal
        数字(基数
      • 10
      • 此外,具体数字
        type
        可以用类型说明符
      • 后缀
      • 来指示(例如,l中的10l表示
        [long]
        又名
        [System.Int64]
        值) - 请参阅概念性
        about_Numeric_Literals 
        帮助主题了解详细信息。
        
        
        
      PowerShell 灵活的
    • casts
    • 可以直接应用于字符串

      ,如果目标类型是数字,则将其解析为 就像数字文字一样。因此,在 PowerShell 7+ 中,您可以执行以下操作: # PowerShell 7+ only. Note the '0b' prefix. # -> '200FA22' ([Int64] '0b000010000000001111101000100010').ToString('X')

      
          
© www.soinside.com 2019 - 2024. All rights reserved.