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

时间:2017-06-07 16:29:13

标签: powershell powershell-v2.0

$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)仅适用于整数。

3 个答案:

答案 0 :(得分:2)

试试这个

myList: Array<string> = ['.net', 'C#', 'web services'];
  

[system.Text.Encoding] :: Default.GetBytes($字符串)

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

  

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

这会将字节数组中的每个字节转换为二进制表示形式。 ToString([object],[Enum]),在这种情况下,如果转换为字符串,则字节将具有类似于65的数字值2将说明将65转换为基数2.您还可以使用8(octo),10(其中与无名称基数10)和16(十六进制)相同。然后它填充左边,直到它的8个字符长,用char 0&#39>

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我建议使用与此用户类似的编码库:

$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。我相信它会以任何方式工作,因为返回将被转储到下面的变量。