我想构建一个包含基于3个变量的MAC地址完整列表的阵列:前缀,开始和结束。用一系列MAC地址构建一个阵列
假设我有20:1E:50:3F:8A
作为前缀,3E
作为开始,43
作为结束。这应该生成MAC地址下面的数组:
20:1E:50:3F:8A:3E
20:1E:50:3F:8A:3F
20:1E:50:3F:8A:40
20:1E:50:3F:8A:41
20:1E:50:3F:8A:42
20:1E:50:3F:8A:43
我开了一个头,但它不会做的工作,只是还没有,我不能左右它让我的头:
function generate($prefix, $start, $end){
$start = str_split($start);
$end = str_split($end);
$start_first = $start[0];
$start_second = $start[1];
$end_first = $end[0];
$end_second = $end[1];
if(is_numeric($start_second)){
$start_second_numeric = true;
}
else{
$start_second_numeric = false;
}
if(is_numeric($end_second)){
$end_second_numeric = true;
}
else{
$end_second_numeric = false;
}
$mac_array = array();
$range_first = range($start_first, $end_first);
foreach($range_first as $first_character){
if($start_second_numeric && $end_second_numeric || !$start_second_numeric && !$end_second_numeric){
$range_second = range($start_second, $end_second);
}
elseif(!$start_second_numeric && $end_second_numeric){
$range_second = range($start_second, "F");
$range_third = range("0", $end_second);
}
elseif($start_second_numeric && !$end_second_numeric){
$range_second = range($start_second, "9");
$range_third = range("A", $end_second);
}
foreach($range_second as $second_character){
$string = $prefix . ":" . $first_character . $second_character;
array_push($mac_array, $string);
}
if(is_array($range_third)){
foreach($range_third as $second_character){
$string = $prefix . ":" . $first_character . $second_character;
array_push($mac_array, $string);
}
}
}
return $mac_array;
}
有人可以帮我吗?
你为什么不只是使用'hexdec'和'dechex'以数字和MAC地址使用十六进制字符串之间进行转换? – Barmar
我实际上并没有意识到这两个功能。说实话,我不明白MAC地址的构建方式。这使得一切都变得更容易,更容易理解!谢谢! – Bob
你不知道MAC地址是十六进制数字吗?如果不知道基本知识,你会如何结束这样的项目,而不做一些研究?所有你需要做的就是阅读维基百科页面,它解释了这一点:_用于以人性化的形式打印MAC-48地址的标准(IEEE 802)格式是六个组,由两个十六进制数字组成,用连字符( - )或冒号:),_ – Barmar