微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 MAC 地址转换和反转为字节 C#

如何解决如何将 MAC 地址转换和反转为字节 C#

我需要转换一个 MAC 地址 - 88:E9:FE:A8:1F:2F 对于这种格式 '0xA8FEE988 0x00002F1F 0x00000000 0x00000000'

我在下面做了这段代码,但它并不优雅。有人可以帮我吗?

        string txtMacAddr =  "88:E9:FE:A8:1F:2F";
        string cmdMAc = "";

        var macReverso = Util.Mac_Reverso(txtMacAddr.Replace(":",""));
        string[] macRev = new string[4];

        macRev[0] = $"0x{macReverso.Substring(4,8)}";
        macRev[1] = $"0x0000{macReverso.Substring(0,4)}";
        macRev[2] = "0x00000000";
        macRev[3] = "0x00000000";

        foreach (var xl in macRev)
        {
            cmdMAc += xl + " ";
            
        }

        Logger.WriteLine(cmdMAc); //op '0xA8FEE988 0x00002F1F 0x00000000 0x00000000'


        public static string Mac_Reverso(string macAddress)
        {
          string macRevertido = string.Empty; 
          string s = macAddress.Replace("0x","");//'0xA8FEE988 0x00002F1F 0x00000000 0x00000000'
          string[] macLista = s.Split(' ');

          foreach (var mac in macLista)
          {
            for (var i = mac.Length; i > 0; i -= 2)
            {
                macRevertido += mac.Substring(i - 2,2);
                if (macRevertido.Length == 12)
                {
                    
                    return macRevertido; //2F1FA8FEE988
                }
            }                               
          }

          return macRevertido;
       }

解决方法

不优雅是什么意思?下面的代码将得到相同的结果,在我看来它更容易阅读。第一个选项是表明它可以通过使用字符引用来完成,如果 mac 地址看起来总是一样的。第二个结果在我的脑海中更容易阅读。

注意:如果将 88 更改为 08 并且由于某种原因省略了零,则以下输入会破坏它们:8:E9:FE:A8:1F:2F 这种情况对您来说重要吗?

您在帖子中包含的输出是您想要获得的吗?你到底想做什么?

    //Reference each char individually. Could break if char position changes.
    string mac =  "88:E9:FE:A8:1F:2F";
    string reverseMac = "0x" + mac[9] + mac[10] + mac[6] + mac[7] + mac[3] + mac[4] + mac[0] + mac[1] + " 0x0000" + mac[15] + mac[16] + mac[12] + mac[13] + " 0x00000000 0x00000000";   
    //Output:0xA8FEE988 0x00002F1F 0x00000000 0x00000000
    
    //Better Option: Split by the ':' delimiter and reference each group of chars. 
    string[] macChars = mac.Split(":"); //Breaks into groups
    string newMac2 = "0x" + macChars[3] + macChars[2] + macChars[1] + macChars[0] + " 0x0000" + macChars[5] + macChars[4] + " 0x00000000 0x00000000";
    //Output: 0xA8FEE988 0x00002F1F 0x00000000 0x00000000

更新:根据您的尝试,两种方法会更好。您可以重复使用 Mac_Reverso 代替下面的 RevertMac。

    //Input 88:E9:FE:A8:1F:2F
    //Output 0xA8FEE988 0x00002F1F 0x00000000 0x00000000
    public static string ConvertMac(string macAddress)
    {
        string[] macChars = macAddress.Split(":");
        string macRevertido = "0x" + macChars[3] + macChars[2] + macChars[1] + macChars[0] + " 0x0000" + macChars[5] + macChars[4] + " 0x00000000 0x00000000";

        return macRevertido;
    }

    //Input  0xA8FEE988 0x00002F1F 0x00000000 0x00000000
    //Output 88:E9:FE:A8:1F:2F
    public static string RevertMac(string mc)
    { 
        string revertedMac = "" + mc[8] + mc[9] + ":" + mc[6] + mc[7] + ":"  + mc[4] + mc[5] + ":"  + mc[2] + mc[3] + ":"  + mc[19] + mc[20] + ":"  + mc[17] + mc[18];
        return revertedMac;
    } 

这并没有解决尼尔提到的字节序问题。您的问题提到反转字节,而您的输出格式意味着反转数组中字节的 order 。这是你的目标吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。