快速转换十进制到二进制数 - Powershell

时间:2015-12-17 16:12:50

标签: powershell

我正在尝试将大约33'000'000十进制数转换为二进制数。 目前我正在使用这个脚本:

$top = 33000000000
$binary
$out
$cache
for($i = 0; $i -lt $top; $i++){
$binary = [Convert]::ToString($i, 2)
$cache = $binary
$out = 10000000000000000000000000 + $cache
Write-Host $out
$out | Out-File -FilePath C:\Users\inffhe\Desktop\binary\binary.txt -Append
} 
Read-Host

嗯它有效,但它的速度很慢...... 有了这个速度,它将连续运行约5天。 你知道如何加快速度吗? 我正在为该号码添加“10000000000000000000000000”,因为它需要有25位数字。 谢谢你的努力。

2 个答案:

答案 0 :(得分:2)

  1. 删除任何控制台输出,例如Write-Host
  2. $out = 10000000000000000000000000 + $cache隐式地将您的二进制字符串转换回整数(或甚至double)以执行添加。确保您的号码最初设置了第25位,例如与$i -bor 0x100000
  3. 使用其他语言。 C#可能会比PowerShell更具可读性和速度。
  4. 在我的机器上,以下代码片段在7秒内执行:

    0..100000|%{[Convert]::ToString(($_-bor0x1000000), 2)}|out-file x.txt
    

    这意味着完整的33000000个数字大约需要40分钟。

    另一方面,以下C#

    using System;
    using System.IO;
    
    class X{
      static void Main() {
        using (var f = new StreamWriter(File.OpenWrite("x.txt"))) {
        for (int i=0;i<33000000;i++) {
          f.WriteLine(Convert.ToString(i | 0x100000, 2));
        }
        }
      }
    }
    

    只需几秒钟即可执行。适用于所有33000000个号码。生成820 MiB文件。

答案 1 :(得分:2)

这在一刻多一点结束了:

filter convert {[convert]::ToString($_,2)}
$pad = [convert]::ToInt32('10000000000000000000000000',2)
$top = 33e6
($pad..($top + $pad)) | convert