我正在尝试找到一种方法将数字转换为数字数组,类似于字符数组,并且仍然能够对数组执行数学运算。
我的第一个想法是将数字转换为字符串,然后转换为字符数组,然后将数组转换回Int32类型。但是,这有一些意想不到的结果。例如,[int[]](1024).ToString().ToCharArray()
会生成以下数组:
49
48
50
52
我确实得到了这里发生的事情 - PowerShell将数字视为ASCII字符,并将它们转换为数字值。但是,这并没有帮助我解决我的问题。
将数字转换为单位数整数数组的“正确方法”是什么?
答案 0 :(得分:4)
试试这个:
[char[]]'1024' | %{$_ - 48}
这会将字符转换为正确值的整数:
C:\PS> [char[]]'1024' | %{$_ - 48} | %{$_.GetType().Name}
Int32
Int32
Int32
Int32
这是一个" mathy"适用于int的版本:
C:\PS> $number = 1024
C:\PS> $numDigits = [math]::Floor([math]::Log10($number)) + 1
C:\PS> $res = @()
C:\PS> for ($i = 0; $i -lt $numDigits; $i++) {$res += $number % 10; $number = [Math]::Floor($number / 10)}
C:\PS> $res[($res.count-1)..0]
1
0
2
4
答案 1 :(得分:2)
行。
[int[]][string[]][char[]]'1024'
([int[]][string[]][char[]]'1024').gettype()
1
0
2
4
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32[] System.Array
从1024开始,将其强制转换为[char []]以分隔数字。然后将chars转换为字符串以生成int转换文字文本,而不是ascii代码。
不同的大头钉,以[int]开头,最小化演员阵容:
$n = 1024
$array = [int[]](($n -split '') -ne '')
$array
$array.GetType()
1
0
2
4
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32[] System.Array