如何将数字转换为数字数组?

时间:2013-11-13 20:40:00

标签: arrays powershell

我正在尝试找到一种方法将数字转换为数字数组,类似于字符数组,并且仍然能够对数组执行数学运算。

我的第一个想法是将数字转换为字符串,然后转换为字符数组,然后将数组转换回Int32类型。但是,这有一些意想不到的结果。例如,[int[]](1024).ToString().ToCharArray()会生成以下数组:

49
48
50
52

我确实得到了这里发生的事情 - PowerShell将数字视为ASCII字符,并将它们转换为数字值。但是,这并没有帮助我解决我的问题。

将数字转换为单位数整数数组的“正确方法”是什么?

2 个答案:

答案 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