我正在尝试从 a000000000-afffffffff 生成一个十六进制范围,但这些值对于 Int32 来说太大了。出现错误 无法将值“687194767360”转换为类型“System.Int32”。错误:“值对于 Int32 来说太大或太小。”
代码如下
(0xa000000000..0xafffffffff|% ToString X10).ToLower()
最佳答案
..
的端点,range operator , 必须符合您的数字超过的 [int]
值。
- 此外,由于您正在尝试收集流式传输的输出
0xa000000000..0xafffffffff| % ToString X10
管道命令 在内存中完整,通过将其包含在(...)
中并调用方法.ToString()
在它上面,收集的输出必须适合数组,并且范围内的元素数量超过最大值。容量.NET array也是。
同样,[Linq.Enumerable]::Range()
不幸的是,该方法也只接受 [int]
端点。
但是,您可以实现(自定义)流解决方案,其中 PowerShell 创建每个格式化数字(字符串)并将其一个一个:
$num = 0xa000000000
while ($num -le 0xafffffffff) { ($num++).ToString('x10') }
注意:
虽然这可行,但会慢。
您将无法在内存中的集合中捕获结果作为一个整体。
- 如果您要将输出流式传输到一个未过滤的文件,您最终会在类 Unix 平台/Windows 上得到一个大小为 704 GB(!)/768 GB(!) 的文件.
- 在内存中,将输出分成小到足以放入数组的 block 是唯一的选择。
关于Powershell 大十六进制范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71186632/