[英]Parsing a MAC Address to an array of three 16-bit shorts
MAC 地址是 48 位。 这相当于三个短裤。 MAC 地址有时写成这样:
01:23:45:67:89:ab
其中每对数字代表一个十六进制数。编写一个函数,该函数将接收一个指向
null
终止字符串的字符指针,如示例中所示,并将其分解,然后将其存储在一个由三个 16 位 short 组成的数组中。 数组的地址也将传递到函数中。
我认为函数头应该看起来像void convertMacToShort(char *macAddr, short *shorts);
. 我遇到的困难是解析char*
。 我觉得如果我循环它是可能的,但这感觉不够有效。 我什至不需要使它成为某种通用功能——MAC 地址将始终是01:23:45:67:89:ab
格式的char*
。
解析这个的好方法是什么?
效率是一回事……健壮性是另一回事。
如果您有非常明确的情况,例如数百万个 MAC 地址的列表,它们都采用相同的格式(只有小写字母,总是前导零,...),那么我建议使用直接访问字符的快速功能。
如果您正在解析用户输入并且还需要检测输入错误,则无需担心执行速度。 在这种情况下,您必须确保检测到用户可能会犯的所有错误(这是一项壮举)。 这导致sscanf(..)
,在这种情况下,我什至建议编写自己的函数来解析字符串(根据我的经验, sscanf(..)
有时会根据输入字符串导致问题,因此我在处理时避免使用它用户输入)。
另一件事:如果您担心执行时间的效率,请编写一个小基准,它运行解析函数数百万次并比较执行时间。 这很容易做到,有时会带来惊喜......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.