gpt4 book ai didi

php - 如何用 PHP 计算我的广播地址?

转载 作者:行者123 更新时间:2023-12-05 02:42:20 27 4
gpt4 key购买 nike

我正在尝试使用按位运算符通过 PHP 计算出广播地址。我在使用 ~ (NOT) 运算符反转子网掩码时遇到问题,因为它以字符串格式返回。

// Derive from inputs normally
$ipv4 = '130.45.34.36';
$subnet_mask = '255.255.240.0';

$network = (object) [
'ipv4' => explode('.', $ipv4),
'subnet_mask' => explode('.', $subnet_mask)
];

$broadcast = [];
$net_address = [];

for($i = 0; $i <= count($network->ipv4) -1; $i++)
$broadcast[$i] = ($net_address[] = (float) $network->ipv4[$i] & (float) $network->subnet_mask[$i])
| ((int) ~$network->subnet_mask[$i]) +256;

printf("Network Address: %s\n", implode('.', $net_address)); // 130.45.32.0 (Expected)
printf("Broadcast Address: %s", implode('.', $broadcast)); // 386.301.288.256 (Unexpected)

由于 ~$network->subnet_mask[$i] 返回一个字符串,我已经厌倦了先将它转换为 (int) 这导致了意外结果 - 没有这个转换,我得到一个 string + int 转换错误。我假设我需要不同的数据类型,感谢任何帮助。我期望的广播地址是:130.45.47.255

编辑 #1:我尝试使用 (float) 转换,结果相同。

最佳答案

使用转换函数对长整数执行按位运算,然后转换回 IP,您不需要所有的分解、循环等。

~ NOT交换子网掩码中已设置/未设置的位以获得通配符掩码,然后是|或者 IP 地址:

$broadcast = long2ip(ip2long($ipv4) | ~ip2long($subnet_mask));

对于网络,只需& AND IP 地址和子网掩码:

$network = long2ip(ip2long($ipv4) & ip2long($subnet_mask));

关于php - 如何用 PHP 计算我的广播地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67654254/

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