只是一个快速的问题,因为我是一种新的,以在PowerShell中的数学
我需要在PowerShell中的转换器转换成IP龙。 它工作正常的较低值,但在较高的人则导致整数溢出。
[int]$a = Read-Host "First bit of IP address"
[int]$b = Read-Host "2nd bit of IP address"
[int]$c = Read-Host "3rd bit of IP address"
[int]$d = Read-Host "4th bit of IP address"
$a *= 16777216
$b *= 65536
$c *= 256
$base10IP = $a + $b + $c + $d
Write-Host $base10IP
工作正常,如果我输入一些低INT IP地址,如10.10.10.10(出168430090)
但有些情况下这导致INT溢出的情况。 我想PowerShell来回绕如果[INT]达到最大值,并提供我一个负值。
我作为一个服务台工作,我支持该软件的一个需要IP在长格式,包括负值。
它是可行的在PowerShell中?
如果您需要了解更多信息或东西是不明确的请指教。
亚历克斯
一个简单的解决办法是使用的[长]代替[INT]。
[long]$a = Read-Host "First bit of IP address"
[long]$b = Read-Host "2nd bit of IP address"
[long]$c = Read-Host "3rd bit of IP address"
[long]$d = Read-Host "4th bit of IP address"
$a *= 16777216
$b *= 65536
$c *= 256
$base10IP = $a + $b + $c + $d
Write-Host $base10IP
你可以做你想做的代码甚至更少行
[IPAddress]$ip = Read-Host "IP address"
$ip.Address
UPDATE
您的评论解释了漫长的时间不是你在哪里了。 这听起来像你正在寻找一个int。
我不能找到一种方法,有PowerShell的不选中(失去精度)的转换或算术,但使用BitConverter类,你可以得到它的工作。
[byte]$a = 10
[byte]$b = 113
[byte]$c = 8
[byte]$d = 203
[BitConverter]::ToInt32(($a, $b, $c, $d), 0)
要么
[IPAddress]$ip = "10.113.8.203"
$bytes = [BitConverter]::GetBytes($ip.Address)
[BitConverter]::ToInt32($bytes, 0)
请注意,ip地址也支持IPv6地址,但是这一次的转换为int显然不能持有IPv6地址。