【问题标题】:Format a MAC address using string.Format in c#在 c# 中使用 string.Format 格式化 MAC 地址
【发布时间】:2012-11-15 02:10:55
【问题描述】:

我有一个格式为0018103AB839 的mac 地址,我想将其显示为:00:18:10:3A:B8:39

我正在尝试使用 string.Format 执行此操作,但我无法真正找到确切的语法。

现在我正在尝试这样的事情:

    string macaddress = 0018103AB839;
    string newformat = string.Format("{0:00:00:00:00:00:00}", macaddress);

这甚至可能吗?还是我应该使用string.Insert

【问题讨论】:

标签: c# string


【解决方案1】:

重新格式化字符串以将其显示为 MAC 地址:

var macadres = "0018103AB839";

var regex = "(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})";
var replace = "$1:$2:$3:$4:$5:$6";
var newformat = Regex.Replace(macadres, regex, replace);    

// newformat = "00:18:10:3A:B8:39"

如果您想验证输入字符串,请使用此正则表达式(感谢 J0HN):

var regex = String.Concat(Enumerable.Repeat("([a-fA-F0-9]{2})", 6));

【讨论】:

  • 很好的解决方案,但您应该将其封装在 DRY 的自定义格式提供程序中。
  • 好吧,正则表达式有两个可能的缺陷:(1) 它不适用于有效输入,(2) 它适用于无效输入。因此,您的解决方案受到第二个缺陷的影响:尝试使用 "!@#$%^&*()-+" 喂它 - 它会很乐意将其显示为 mac 地址。我知道 OP 对验证只字未提,但如果你用 [a-fA-F0-9] 或至少 \w 替换点会很好。
  • @J0HN 是的,我同意,但正如你所说,OP 只是询问将字符串显示为 MAC 地址。所以这里的问题是:如果输入不是有效的 MAC 地址,是否真的不显示更好?我认为这取决于具体情况,但我会将您的验证作为选项添加到我的答案中,谢谢!
  • @jlvaquero 好点,谢谢,但我认为这种情况有点过分。但是谁想要清理这个,请随时阅读Custom Format Providers
【解决方案2】:

假设我们将 Mac 地址存储在一个 long 中。这是如何将它放在格式化的字符串中:

ulong lMacAddr = 0x0018103AB839L;
string strMacAddr = String.Format("{0:X2}:{1:X2}:{2:X2}:{3:X2}:{4:X2}:{5:X2}",
    (lMacAddr >> (8 * 5)) & 0xff, 
    (lMacAddr >> (8 * 4)) & 0xff,
    (lMacAddr >> (8 * 3)) & 0xff,
    (lMacAddr >> (8 * 2)) & 0xff,
    (lMacAddr >> (8 * 1)) & 0xff,
    (lMacAddr >> (8 * 0)) & 0xff);

【讨论】:

    【解决方案3】:
    string input = "0018103AB839";
    
    var output = string.Join(":", Enumerable.Range(0, 6)
        .Select(i => input.Substring(i * 2, 2)));
    

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-01
      • 2023-03-31
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多