这是一个简单的问题,因为我对PowerShell中的数学有点新鲜
我需要在PowerShell中创建一个将IP转换为Long的转换器。它适用于较低的值,但在较高的值上它会导致整数溢出。
[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溢出。如果[int]达到最大值并给我一个负值,我希望PowerShell能够回滚。
我作为服务台工作,我支持的软件之一需要长版IP,包括负值。
在PowerShell中可行吗?
如果您需要更多详细信息或有些不明确的地方,请告知。
亚历
答案 0 :(得分:6)
一个简单的解决方案是使用[long]而不是[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
<强>更新强>
你的评论解释了很长一段时间不是你所追求的。这听起来像你正在寻找的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)
请注意,IPAddress也支持IPv6地址,但最后转换为int显然无法保存IPv6地址。