最近遇到一个小问题,从网络接收到的包中含有MAC地址(ASCII字符格式,例如”74-29-AF-F2-30-D3”,共18个字符),按照约定我需要把它转换成6个字节的二进制数(74 29 AF F2 30 D3)。
收到的字符串“74-29-AF-F2-30-D3”,是ASCII编码的,内存中就是:37 34 2d 32 39 2d 41 46 2d 46 32 2d 33 30 2d 44 33(共18个字节),现在我要做的就是写一个函数把这个输入转换成6个字节的输出“74 29 AF F2 30 D3”.思路就是把输入串中的相邻两个字符,变成输出中的一个字节(8bit)的高4bit和低4bit;以前两个字符为例,即把37->7,34->4,组成十六进制的0x74。代码如下(简化后的版本),注意要用到无符号类型,