-1

MAC 地址为 48 位。这相当于三条短裤。MAC 地址有时会这样写:01:23:45:67:89:ab其中每对数字代表一个十六进制数。

编写一个函数,该函数将接收一个指向 null终止字符串的字符指针,如示例中所示,并将其拆分,然后将其存储在三个 16 位短的数组中。数组的地址也将传递给函数。

我认为函数头应该看起来像void convertMacToShort(char *macAddr, short *shorts);. 我遇到的困难是解析char*. 我觉得如果我循环它是可能的,但这感觉不够有效。我什至不需要让它成为某种通用函数——MAC 地址将始终char*01:23:45:67:89:ab.

什么是解析这个的好方法?

4

1 回答 1

1

效率是一回事……稳健性是另一回事。

如果您有非常明确的情况,例如数百万个 MAC 地址列表,这些地址都采用相同的格式(只有小写字母,总是前导零,...),那么我建议使用直接访问字符的快速函数。

如果您正在解析用户输入并且还需要检测输入错误,则无需担心执行速度。在这种情况下,您必须确保检测到用户能够犯的所有可能错误(这是一项壮举)。这会导致sscanf(..),在这种情况下,我什至建议编写自己的函数来解析字符串(根据我的经验,sscanf(..)有时会根据输入字符串引起麻烦,因此我在处理用户输入时避免使用它)。

另一件事:如果您担心执行时间的效率,请编写一个运行解析函数几百万次的小基准测试并比较执行时间。这很容易做到,有时会带来惊喜......

于 2015-12-08T20:15:43.727 回答