gpt4 book ai didi

powershell - PowerShell强制[int]换行(IP到Long的转换)

转载 作者:行者123 更新时间:2023-12-03 00:30:07 35 4
gpt4 key购买 nike

只是一个简单的问题,因为我是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

如果我输入了一些低整数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

更新

您的评论解释说,长期以来您已不在了。听起来您正在寻找一个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地址。

关于powershell - PowerShell强制[int]换行(IP到Long的转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20932443/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com