将字符串转换为U_Char-错误使用STRTOL吗?

问题描述

我正在研究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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...