使用string.Format在c#中格式化MAC地址

14

我有一个格式为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


你可能应该考虑使用这样的正则表达式:https://dev59.com/NW855IYBdhLWcg3wlFaP - Marc
正则表达式不仅仅是用来查找某种样式的,我正在尝试转换样式 :) - 2pietjuh2
1
不是完全一样的问题,但几乎相同: https://dev59.com/QXVC5IYBdhLWcg3wxEN1 - Kevin Gosse
1
不,你也可以使用正则表达式来替换内容。 - Marc
4个回答

13

将字符串重新格式化为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原则。 - jlvaquero
2
正则表达式有两个可能的缺陷:(1) 它不能处理有效输入,(2) 它可以处理无效输入。因此,你的解决方案容易受到第二个缺陷的影响:尝试将其输入“!@#$%^&*()-+” - 它会愉快地将其显示为 MAC 地址。我知道 OP 没有提到验证,但如果你用 [a-fA-F0-9] 或至少 \w 替换点号,那就更好了。 - J0HN
@J0HN 是的,我同意你的观点,但正如你所说,原帖只是关于将字符串显示为 MAC 地址。因此,这里的问题是:如果输入不是有效的 MAC 地址,真的最好不显示任何内容吗?我认为这取决于情况,但我会将您的验证作为我的答案选项之一,谢谢! - Marc
1
@jlvaquero 很好的观点,谢谢,但我认为这对于这种情况有点过大了。但是,如果有人想要清理这个问题,请随意阅读有关自定义格式提供程序的内容。 - Marc

6
string input = "0018103AB839";

var output = string.Join(":", Enumerable.Range(0, 6)
    .Select(i => input.Substring(i * 2, 2)));

5

假设我们已经将Mac地址存储在一个长整型变量中。以下是如何将其格式化为字符串:

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);

0

使用J0HN建议的正则表达式,我对其进行了微调并将其放入扩展方法中。

public static string FormatAsMacAddress(this string mac)
{
    var regex = "^([a-fA-F0-9]{2}){6}$";
    return string.Join(":", Regex.Match(mac, regex).Groups[1].Captures.Select(x => x.Value));
}

你可以像这样使用它:

var macAddress = "0018103AB839";
macAddress.FormatAsMacAddress();

输出:

00:18:10:3A:B8:39


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接