在 Powershell 中获取字符串的二进制值

Getting the binary value of a character string in Powershell

$getInput = Read-Host "ASCII or Binary? `n"
$getInput = $getInput.toLower()

if($getInput -eq "ascii"){

    ""

    #Write-Host "Type In Your ASCII" -backgroundcolor "black" 
    $getAscii = Read-Host "Type In Your ASCII`n" 
    ""
    ""
    $readAscii = @($getAscii)
    [byte[]]$outBytes = $readAscii 

}
elseif($getInput -eq "binary"){

}
else{
    Write-Host "Wrong Input... [ASCII] or [BINARY]" -backgroundcolor "red" -foregroundcolor "white"
}

我希望能够获取用户段落或他们输入的任何字符串并将其转换为二进制。 [conver]::toString($getAscii,2) 仅适用于整数。

我建议像这位用户一样使用编码库:

$stringToConvert = "Hello World"

    $test = [System.Text.Encoding]::UTF8.GetBytes($stringToConvert) | %{ [System.Convert]::ToString($_,2).PadLeft(8,'0') }

    $test

来源:https://www.reddit.com/r/PowerShell/comments/3e82vk/convert_string_to_binary_and_back/

*注意:我相信这个方法的原始发布者打算将 $foo 分配给第二次转换。我相信它会以任何一种方式工作,因为 return 将被转储到下面的变量中。

试试这个

$string = "ABCDEF"
[system.Text.Encoding]::Default.GetBytes($String) | %{[System.Convert]::ToString($_,2).PadLeft(8,'0') }

[system.Text.Encoding]::Default.GetBytes($String)

这会将字符串转换为字节数组。您可以将默认值更改为另一个编码

| %{[System.Convert]::ToString($_,2).PadLeft(8,'0') }

这会将字节数组中的每个字节转换为二进制表示形式。 ToString([object],[Enum]),在这种情况下,如果转换为字符串,字节将具有类似于 65 的数字值,2 会说将 65 转换为基数 2。您还可以使用 8(octo)、10(which与 none aka base 10) 和 16(Hex) 相同。然后它用 char 0's

向左填充直到它的 8 个字符长
'hello world' -split '' | % {
    if ($_ -ne '') {
        #[int][char]$_
        [System.Convert]::ToString(([int][char]$_),2)
    }
}
  1. 使用拆分运算符按每个字符拆分字符串
  2. 将其沿着管道发送到 foreach 对象循环
  3. 拆分操作最终包括字符串中的space字符 所以条件确保我们不对其采取行动——我们将其过滤掉。
  4. 注释行用于测试目的。每个角色都有一个 [string] 的类型,我们需要它作为 [char],所以我们显式地转换它 因此,PowerShell 引擎会为我们动态切换它(如 只要它可以)。在同一行中,我们明确地将 [char] 转换为 一个 [int] 以获得 ASCII-> 十进制表示。这个测试只是为了 确保我得到正确的输出,并在其中留下评论 如果 OP 想看到它。
  5. 最后,我们使用 System.Convert class 的 ToString() 方法接受一个 "base" 参数来定义我们想要的 base2(二进制)表示 位置 1 中提供的整数,转换为 TYPE [string].