这是一个简单的问题,因为我在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中可行吗?
如果您需要更多详细信息或有些不明确的地方,请告知.
亚历克斯
一个简单的解决方案是使用[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
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)
请注意,IPAddress也支持IPv6地址,但最后转换为int显然无法保存IPv6地址.