PowerShell的力量[INT]包(IP龙转换)(PowerShell force [int]

2019-10-19 04:21发布

只是一个快速的问题,因为我是一种新的,以在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中?

如果您需要了解更多信息或东西是不明确的请指教。

亚历克斯

Answer 1:

一个简单的解决办法是使用的[长]代替[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地址。



文章来源: PowerShell force [int] to wrap (IP to Long conversion)