⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mac2hex.pl

📁 web51的开发库
💻 PL
字号:
#! /usr/bin/perl##  Convert Ethernet (MAC) address (dot notation) to "ether.inc"#sub usage {    print STDERR "usage: $ego [-v] [-binutils] ddd.ddd.ddd.ddd.ddd.ddd\n";    print STDERR "       $ego [-v] [-binutils] hh:hh:hh:hh:hh:hh\n";    print STDERR "       $ego [-v] [-binutils] \@file\n";    print STDERR "       $ego [-v] [-binutils] - < file\n";    exit 1;}$ego = $0;$ego =~ s/.*[\/\\]//;$define = 0;$bat = 0;$equ = 0;$verbose = 0;while ($ARGV[0] =~ /^-/ && $ARGV[0] ne '-') {    $opt = shift;    if ($opt eq '-define') {        $define = 1;    } elsif ($opt eq '-bat') {        $bat = 1;    } elsif ($opt eq '-equ') {        $equ = 1;    } elsif ($opt eq '-binutils') {        $binutils = 1;    } elsif ($opt eq '-v') {        $verbose = 1;    } else {        &usage;    }}$mac = shift;&usage if ($mac eq '');exit(1) if (($mac = &getmac($mac)) eq '');(@a) = split(/\./,$mac) ;$mac = sprintf("%d.%d.%d.%d.%d.%d", $a[0], $a[1], $a[2], $a[3], $a[4], $a[5]);if ($define) {    printf("#define STATIC_MAC_MSB 0%02X%02Xh\t/* MAC address $ip */\n", $a[0], $a[1]);    printf("#define STATIC_MAC_NSB 0%02X%02Xh\n", $a[2], $a[3]);    printf("#define STATIC_MAC_LSB 0%02X%02Xh\n", $a[4], $a[5]);} elsif ($bat) {    print "set MAC=$mac\n";} elsif ($equ) {    if ($binutils) {	printf(".global\tMAC_MSB, MAC_NSB, MAC_LSB\n");	printf(".equ\tMAC_MSB, 0x%02X%02X\t; MAC address $ip\n", $a[0], $a[1]);	printf(".equ\tMAC_NSB, 0x%02X%02X\n", $a[2], $a[3]);	printf(".equ\tMAC_LSB, 0x%02X%02X\n", $a[4], $a[5]);    } else {	printf("public\tMAC_MSB, MAC_NSB, MAC_LSB\n");	printf("MAC_MSB\tequ\t0%02X%02Xh\t; MAC address $ip\n", $a[0], $a[1]);	printf("MAC_NSB\tequ\t0%02X%02Xh\n", $a[2], $a[3]);	printf("MAC_LSB\tequ\t0%02X%02Xh\n", $a[4], $a[5]);    }} else {    if ($binutils) {	printf("\t.word\t0x%02X%02X\t; Ethernet address $mac\n", $a[0], $a[1]);	printf("\t.word\t0x%02X%02X\n", $a[2], $a[3]);	printf("\t.word\t0x%02X%02X\n", $a[4], $a[5]);    } else {	printf("\tdw\t0%02X%02Xh\t; Ethernet address $mac\n", $a[0], $a[1]);	printf("\tdw\t0%02X%02Xh\n", $a[2], $a[3]);	printf("\tdw\t0%02X%02Xh\n", $a[4], $a[5]);    }}if ($verbose) {    print STDERR sprintf("$mac (%x:%x:%x:%x:%x:%x)\n",$a[0],$a[1],$a[2],$a[3],$a[4],$a[5]);}##  Resolve MAC address#sub getmac {    local($f) = @_;    local($s);    $mac = '';    if ($f =~ /^[@]/ || $f eq '-') {        if ($f ne '-') {            $f =~ s/^[@]//;            if (!open(MAC, "<$f")) {                print STDERR "Can't open MAC address file \"$f\"!\n";                return '';            }        }        while(1) {            if ($f ne '-') {                last if (!($s = <MAC>));            } else {                last if (!($s = <>));            }            ##print STDERR "$s";            $s =~ s/[\s\r\n]+$//;            $s =~ s/\s*[#].*$//;            next if ($s eq '');            if ($s =~ /^\s*([0-9]+[.][0-9]+[.][0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)$/i) {                $mac = $s;            }            if ($s =~ /^\s*([0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+[:][0-9a-f]+)$/i) {                $mac = $s;            }        }    } else {        $mac = $f;    }    if ($mac eq '') {	print STDERR "Can't find Ethernet address of the form ddd.ddd.ddd.ddd.ddd.ddd or hh:hh:hh:hh:hh:hh!\n";    } else {        ##print STDERR "MAC/NM=$mac\n";        if ($mac =~ /^\d+[.]\d+[.]\d+[.]\d+[.]\d+[.]\d+$/) {            return $mac;        } elsif ($mac =~ /^\s*([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)[:]([0-9a-f]+)$/i) {            $mac = sprintf("%d.%d.%d.%d.%d.%d",hex($1),hex($2),hex($3),hex($4),hex($5),hex($6));            return $mac;        } else {	    print STDERR "Ethernet address ($mac) not of the form ddd.ddd.ddd.ddd.ddd.ddd or hh:hh:hh:hh:hh:hh!\n";        }    }    return ('', '');   # error return}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -