编写一个 MAC 地址转换工具
网络中每台设备都有一个唯一的网络标识,这个地址叫 MAC 地址或网卡地址,由网络设备制造商生产时写在硬件内部。MAC 地址则是 48 位的(6 个字节),通常表示为 12 个 16 进制数,每 2 个 16 进制数之间用冒号隔开,如 08:00:20:0A:8C:6D 就是一个 MAC 地址。
但是,在计算机系统中 MAC 地址有许多种写法,例如
1 | (1)08:00:20:0A:8C:6D |
有时,我们需要对这些地址进行转换,今天我们将写一个小工具,实现各种格式的 MAC 地址之间的转换。
程序设计
简单说一下程序的设计思路,用户输入一个字符串,首先我们应该判断一下,用户输入的是否是一个合法的 MAC 地址(以上四种格式),如果不是,那应该抛出一个异常,告诉用户他输入的不是一个合法的 MAC 地址,如果用户输入的是一个合法的 MAC 地址,我们需要做进一步的判断,是具体哪种格式的,以转换成另外三种格式的。
如何判断一个字符串是否符合格式要求,我们可以使用正则表达式。正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
例如,我们可以用^[A-F0-9]{2}(:[A-F0-9]{2}){5}$
这个表达式来匹配08:00:20:0A:8C:6D
这个格式的 MAC 地址。同理,如下。
MAC 地址示例 | 正则表达式 |
---|---|
08-00-20-0A-8C-6D | ^[A-F0-9]{2}(-[A-F0-9]{2}){5}$ |
0800200A8C6D | ^[A-F0-9]{12}$ |
0800.200A.8C6D | ^[A-F0-9]{4}(.[A-F0-9]{4}){2}$ |
对用户输入的 MAC 地址进行匹配后,我们就可以开始转换了,对于使用:和 - 符号分隔的 MAC 地址,可以直接进行替换;对于 12 位无分隔的 MAC,可以通过其他格式的 MAC 地址剔除符号实现转换;4 位点分的 MAC 地址可以通过对 12 位无分隔的 MAC 地址进行 4 位点分实现。
程序实现
例子是 C#的,只贴关键代码,其他语言实现思路都一样,后附一个能跑通的程序(含工程)。
1 | // 定义判断 MAC 地址是否合法的正则表达式 |