LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1039|回复: 4

请教字符串转换问题?

[复制链接]
发表于 2003-10-17 09:31:58 | 显示全部楼层 |阅读模式
static char *macline;
char *str;

str = "00:00:c0:ee:ee:ee"
macline = src;
但是我要把str这个字符串中的00, 00, c0, ee, ee, ee分别赋值给dev-> dev_addr[0], dev_addr[1], dev_addr[2], dev_addr[3], dev_addr[4], dev_addr[5],
意思是想把字符串分解成0x00赋值给dev_addr[0], 把0x00赋值给dev_addr[1], 0xc0给dev_addr[2], 0xee给dev_addr[3],以此类似,
我的问题是怎么把那个字符串分解后每两位转成十六进制再赋给dev_addr[x], 我只能实现赋值一个单个的位.
请教程序中应该怎样实现? 在线感谢中...
发表于 2003-10-17 10:35:36 | 显示全部楼层
sscanf
 楼主| 发表于 2003-10-17 10:53:19 | 显示全部楼层
无双你好,我是在linux内核里面编程,没办法使用sscanf
dev_addr在linux内核中/usr/src/linux/include/linux/netdevice.h文件233行,是很大的一个结构.
struct net_device
{
unsigned char dev_addr[MAX_ADDR_LEN];
}
我只列出了这一个成员,因为net_device结构太大了.
在我的驱动里面定义了struct net_device *dev
因为我用的开发板不是x86结构,是samsung的s3c2410处理器,上面的网卡cs8900a是没有使用eeprom来存放mac地址,这样我的开发板就没有mac地址,而我现在想的是让linux启动时,我可以传给内核一个参数mac=00:00:c0:ee:ee:ee, 内核接收到之后,用接收到的这个字符串来替换驱动中的dev_addr结构,
(开发板中的mac地址原本是写死在驱动中的
dev->dev_addr[0] = 0x00;
dev->dev_addr[1] = 0x00;
dev->dev_addr[2] = 0xc0;
dev->dev_addr[3] = 0xff;
dev->dev_addr[4] = 0xee;
dev->dev_addr[5] = 0x08;
我想从内核启动参数中接收到00:00:c0:ee:ee:ee,替换掉上面的那些dev_dev_addr来实现手工修改mac地址,但是不知怎么样才能把接收到的字符串中的00:00:c0:ee:ee:ee分解成0x00,0x00,0xc0,0xee,0xee,0xee来赋值给dev_addr.

问题是怎么才能把如'00, 00, c0, ee, ee, ee"这样的字符串分解成0x00,0x00,0xc0,0xc0,0xee,0xee,0xee这个的十六进制数值并分别把值赋值给dev->dev_addr[x]这个字符数组?
dev->dev_addr[0] = 0x00;
dev->dev_addr[1] = 0x00;
dev->dev_addr[2] = 0xc0;
dev->dev_addr[3] = 0xee;
dev->dev_addr[4] = 0xee;
dev->dev_addr[5] = 0xee;

谢谢你!
发表于 2003-10-17 11:08:56 | 显示全部楼层
用笨办法:

  1. unsigned char hex2char(char c)
  2. {
  3.     if (c>='0' && c<='9'){
  4.         return c-'0'
  5.     }else if( c>='a' && c<='f'){
  6.         return c-'a' + 10
  7.     }else if( c>='A' && c<='F'){
  8.         return c-'A' + 10
  9.     }
  10.     /* can not goes here */
  11.     assert(0)
  12.     return 0
  13. }
  14. for(i=0;i<6;i++){
  15.     dev[i] = (hex2char(str[i*3]) << 4) + hex2char(str[i*3+1])
  16. }
复制代码


没有测试过。
 楼主| 发表于 2003-10-17 12:48:01 | 显示全部楼层
谢谢CharlesWang!Thanks
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表