0

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

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

49
48
50
52

我确实知道这里发生了什么 - PowerShell 将数字视为 ASCII 字符,并将它们转换为它们的数值。但是,这并不能帮助我解决我的问题。

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

4

2 回答 2

4

尝试这个:

[char[]]'1024' | %{$_ - 48}

这会将字符转换为正确值的整数:

C:\PS> [char[]]'1024' | %{$_ - 48} | %{$_.GetType().Name}
Int32
Int32
Int32
Int32

这是一个适用于 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
于 2013-11-13T20:46:02.343 回答
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[]] 以分隔数字。然后将字符转换为字符串以进行 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               
于 2013-11-13T20:50:54.207 回答