You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAC地址string、十六进制表示与ulong的关联及互转方法

MAC地址:string、十六进制与ulong的关联及转换方法

三者的核心关联

MAC地址本质是一个48位的二进制数值,这是它的底层本质:

  • string格式的MAC(比如14:10:9F:D4:04:1A)是这个48位数值的可读表示——把48位拆成6组8位(每组对应2个十六进制字符),用冒号分隔,方便人类阅读。
  • 十六进制表示就是去掉分隔符的纯字符串(比如14109FD4041A),直接对应48位数值的十六进制写法。
  • ulong(无符号64位整数)则是把这个48位数值存储到64位容器里,高位的16位自动补0——因为ulong的范围足够容纳48位(48位最大值是0xFFFFFFFFFFFF,远小于ulong的最大值0xFFFFFFFFFFFFFFFF)。

简单说:string是带分隔符的十六进制可读版,纯十六进制字符串是数值的直接字符形式,ulong是数值的整数存储形式,三者本质都是同一个48位MAC数值的不同表现。


C#中的相互转换实现

1. 从MAC字符串(带冒号)转换为ulong

思路:先去掉字符串里的冒号,得到纯十六进制字符串,再转换为ulong。

public static ulong MacStringToUlong(string macAddress)
{
    if (string.IsNullOrWhiteSpace(macAddress))
        throw new ArgumentException("MAC地址不能为空");

    // 移除所有冒号(如果需要支持连字符,可添加.Replace("-", ""))
    string cleanHex = macAddress.Replace(":", "");
    
    // 验证长度是否为12位(6组×2位十六进制)
    if (cleanHex.Length != 12)
        throw new FormatException("MAC地址格式不正确");

    // 转换为ulong,按十六进制解析
    return Convert.ToUInt64(cleanHex, 16);
}

2. 从ulong转换为MAC字符串(带冒号)

思路:把ulong转成12位的十六进制字符串(自动补前导零),再每2位插入冒号。

public static string UlongToMacString(ulong macValue)
{
    // 转换为12位大写十六进制,不足时自动补前导零
    string fullHex = macValue.ToString("X12");
    
    // 按每2位分组,用冒号连接成标准MAC格式
    return string.Join(":", Enumerable.Range(0, 6)
        .Select(index => fullHex.Substring(index * 2, 2)));
}

3. 纯十六进制字符串与ulong的转换

这一步是整数与十六进制字符串的常规转换,非常直接:

  • 十六进制字符串转ulong:Convert.ToUInt64("14109FD4041A", 16)
  • ulong转十六进制字符串:macUlong.ToString("X12")(大写)或macUlong.ToString("x12")(小写)

注意事项

  • 格式兼容:如果你的MAC字符串用连字符(14-10-9F-D4-04-1A)或点分隔,只需在转换前统一移除这些分隔符即可。
  • 大小写:十六进制的大小写不影响转换,Convert.ToUInt64和ToString都能处理大写/小写的十六进制字符。
  • 数值范围:因为MAC是48位,所以转换后的ulong高16位始终为0,不会出现溢出问题。

内容的提问来源于stack exchange,提问作者SwiftArchitect

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:17:39