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

2pi*_*uh2 13 c# string

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

我试图这样做,string.Format但我真的找不到确切的语法.

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

    string macaddress = 0018103AB839;
    string newformat = string.Format("{0:00:00:00:00:00:00}", macaddress);
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?或者我应该使用string.Insert

Mar*_*arc 11

重新格式化字符串以将其显示为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"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 那么,正则表达式可能存在两个缺陷:(1)它不适用于有效输入,(2)它适用于无效输入。因此,您的解决方案受到第二个缺陷的困扰:尝试给它添加“!@#$%^&*()-+”-它会愉快地显示为mac地址。我知道OP没有对验证做任何说明,但是如果您将点替换为[[a-fA-F0-9]`或至少是\ w,那将是很好的。 (2认同)

Jon*_*n B 6

string input = "0018103AB839";

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


Sin*_*ian 5

假设我们将 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);
Run Code Online (Sandbox Code Playgroud)