问题描述
我正在研究C代码,它将MAC地址作为字符串,对其进行标记,然后将各个八位字节存储为u_char数组。我想将标记化的MAC地址存储为结构:
typedef struct macAddress{
u_char addr[6];
}macAddr;
足够简单。这是转换功能:
macAddr* convertMAC( char* str ){
// Example input: "52:54:00:6a:20:f1"
printf( "Now converting :: %s\n",str );
macAddr* ret = (mac*)malloc( sizeof(mac) ); // calling function will free() later…
int i = 0;
char* token = strtok(str,":");
while (token != NULL) {
printf("%d) ...tokenized :: %s\n",i,token);
ret->addr[i] = strtol( token,NULL,16 );
i++;
token = strtok(NULL,":");
}
return ret;
}
然后我把它整理一下以检查我的工作:
void printMAC( macAddr* mac ){
printf( "MAC address:" );
printf( "\t%u:%u:%u:%u:%u:%u\n",mac->addr[0],mac->addr[1],mac->addr[2],mac->addr[3],mac->addr[4],mac->addr[5] );
}
似乎很容易。现在,使用此驱动程序代码...
...etc...
mac* tmpMAC = convertMAC( "52:54:00:6a:20:f1" );
printMAC( tmpMAC );
...etc...
我得到以下输出:
Now converting :: 52:54:00:6a:20:f1
0) ...tokenized :: 52
1) ...tokenized :: 54
2) ...tokenized :: 00
3) ...tokenized :: 6a
4) ...tokenized :: 20
5) ...tokenized :: f1
MAC address: 0:82:84:0:106:32
Gah!甚至没有关闭。
我认为这里有两种可能性:首先,当我使用以下命令将标记化的字符串转换为十六进制(基数为16)时:
ret->addr[i] = strtol( token,16 );
strtol()
转换正确,但是我的printf("%u",number)
在屏幕上奇怪地表示了十六进制字符。或者我不了解strtol()
的实际操作,并且转换不正确。我怀疑是后者,但是我无法在联机文档中发现我的错误。
有人知道我在做什么错吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)