繁体   English   中英

将 MAC 地址解析为三个 16 位短数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM