From ad40f1baa52dcacad78939031d1a0b2b3afe2753 Mon Sep 17 00:00:00 2001 From: crusader Date: Mon, 11 Sep 2017 16:42:19 +0900 Subject: [PATCH] mac util --- net/converter/mac.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 net/converter/mac.go diff --git a/net/converter/mac.go b/net/converter/mac.go new file mode 100644 index 0000000..63b785c --- /dev/null +++ b/net/converter/mac.go @@ -0,0 +1,43 @@ +package converter + +import ( + "net" + "regexp" + "strconv" + "strings" +) + +var ( + macStripRegexp = regexp.MustCompile(`[^a-fA-F0-9]`) +) + +func MacToUint(hwAddr net.HardwareAddr) (uint64, error) { + mac := hwAddr.String() + hex := macStripRegexp.ReplaceAllLiteralString(mac, "") + + return strconv.ParseUint(hex, 16, 64) +} + +func MacToInt(IPv4Addr net.HardwareAddr) int64 { + bits := strings.Split(IPv4Addr.String(), ":") + + b0, _ := strconv.ParseInt(bits[0], 16, 64) + b1, _ := strconv.ParseInt(bits[1], 16, 64) + b2, _ := strconv.ParseInt(bits[2], 16, 64) + b3, _ := strconv.ParseInt(bits[3], 16, 64) + b4, _ := strconv.ParseInt(bits[4], 16, 64) + b5, _ := strconv.ParseInt(bits[5], 16, 64) + + var sum int64 + + //52242420297 + //52242420297 + sum += int64(b0) << 40 + sum += int64(b1) << 32 + sum += int64(b2) << 24 + sum += int64(b3) << 16 + sum += int64(b4) << 8 + sum += int64(b5) + + return sum +}