如何解决将 EUI64 转换为 EUI48 或 MacAddress
我正在尝试使用 goLang 将 EUI64 转换为 EUI48,但我似乎没有找到任何直接的解决方案。任何人都可以帮我解决这个问题。
解决方法
您必须清除中间的字节 (0xfffe) 并切换第 7 个最高有效位:
package main
import (
"fmt"
"strconv"
"regexp"
)
func main() {
var eui64 string = "0221.86ff.feb5.6e10"
fmt.Printf("%s\n",eui64)
var eui48 string = from_eui_64_to_48(eui64)
fmt.Printf("%s\n",eui48)
}
func from_eui_64_to_48(s string) string {
reg,err := regexp.Compile("[^a-fA-F0-9]+") // keep only hex characters
if err != nil {
panic(err)
}
hexString := reg.ReplaceAllString(s,"")
n,err := strconv.ParseInt(hexString,16,64) // convert string to int64
if err != nil {
panic(err)
}
n ^= 0x0200000000000000 // toggle the 7th most significant bit of 64 bits integer
n = (n >> 12) | (n & 0xffffff) // keep 3 bytes from the left and 3 bytes from the right,clear 0xfffe
return fmt.Sprintf("%012x",n) // return string
}
输入:
0221.86ff.feb5.6e10
输出:
02186fffef56
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。