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
相关产品推荐
相关产品推荐

