我正在尝试将大约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位数字。 谢谢你的努力。
答案 0 :(得分:2)
Write-Host
。$out = 10000000000000000000000000 + $cache
隐式地将您的二进制字符串转换回整数(或甚至double
)以执行添加。确保您的号码最初设置了第25位,例如与$i -bor 0x100000
。在我的机器上,以下代码片段在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