Powershell 大六角范围

Me *_*elf 2 powershell hex largenumber large-data

我正在尝试从 a000000000-affffffffff 生成一系列十六进制,但这些值对于 Int32 来说太大了。出现错误Cannot convert value "687194767360" to type "System.Int32". Error: "Value was either too large or too small for an Int32."

这是代码 (0xa000000000..0xafffffffff|% ToString X10).ToLower()

mkl*_*nt0 5

..范围运算符的端点必须适合[int]您的数字超出的值。

  • 此外,由于您尝试将流0xa000000000..0xafffffffff| % ToString X10管道命令的输出完整地收集在内存中,因此通过将其包含在其中(...)并调用其方法.ToString(),收集的输出必须适合一个数组,以及范围内的元素计数超过最大值 .NET 数组的容量也是如此。

同样,[Linq.Enumerable]::Range()不幸的是该方法也只接受[int]端点。

但是,您可以实现一个(自定义)流解决方案,其中 PowerShell 创建每个格式化数字(字符串)并将其一一发送到管道:

$num = 0xa000000000
while ($num -le 0xafffffffff) { ($num++).ToString('x10') }
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 虽然这有效,但速度会很

  • 您将无法将结果作为一个整体捕获到内存中的集合中

    • 如果您要将输出流式传输到未经过滤的文件,那么在类 Unix 平台/Windows 上您最终会得到一个大小为 704 GB(!)/768 GB(!)的文件。
    • 在内存中,将输出划分为足够小的块以适合数组是唯一的选择。