我想決議MacOS上arp -a命令的輸出,在Go中使用net.ParseMAC函式,但是由于格式奇怪,我得到一個錯誤。
arp -a命令的輸出示例:
> arp -a
? (192.168.1. 1)在0:22:7:4a:21:d5 on en0 ifscope [ethernet]
? (224.0.0. 251)在1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255. 250)在1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]
MAC格式化是出乎意料的,因為MAC地址沒有做01和00,而只包括1和0。似乎允許的格式是A:B:C:D:E:F而不是AA:BB:CC:DD:EE:FF。
我怎樣才能使輸出為后一種格式,以便它能被net.ParseMAC函式所接受?
編輯。 我做了一個簡單的Go函式來解決離開前導零的問題:
// FixMacOSMACNotation修復了macOS上MAC地址的記號。
//例如:1:0:5e:7f:ff:fa變成01:00:5e:7f:ff:fa。
func FixMacOSMACNotation(s string) string {
var newString string
split := strings.Split(s, " :")
for i, s := range split {
if i != 0 {
newString = " :"/span>
}
if len(s) == 1 {
newString = "0"/span> s
} else {
newString = s
}
}
return newString
然后可以在net.ParseMAC中成功使用。
uj5u.com熱心網友回復:
這個版本使用strings.Builder來修復OP所需的給定輸入。
[strings.]Builder用于使用Write方法有效地構建一個字串。它最大限度地減少了記憶體的復制。零值是隨時可以使用的。不要復制一個非零的生成器。
package main
import (
"fmt"/span>
"strings"/span>
)
func main(){
inputs :=[]string{
"1:0:5e:7f:ff:fa" ,
"1:0:5e:7f:ff:f"。
"1:0:5e:7f:ff:"。
"1:0:5e::ff:"。
}
for _, input := range inputs {
fmt.Println()
fmt.Println("FixMacOSMACNotation", FixMacOSMACNotation(input) )
}
}
// FixMacOSMACNotation修復了macOS上的MAC地址的符號。
//例如:1:0:5e:7f:ff:fa變成01:00:5e:7f:ff:fa。
func FixMacOSMACNotation(s string) string {
var e int
var sb strings.Builder
for i := 0; i < len(s); i {
r := s[i]
if r == ' :' {
for j := e; j < 2; j {
sb.WriteString("0")
}
sb.WriteString(s[i-e : i])
sb.WriteString(":")
e =0
繼續。
}
e
}
for j := e; j < 2; j {
sb.WriteString("0")
}
sb.WriteString(s[len(s)-e:] )
return sb.String()
}
嘗試一下 這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/308854.html
標籤:
