- 论坛徽章:
- 0
|
- #define CLASS(p) ((*(unsigned char*)(p))>>6)
- static int
- parseip(char *name, uint32_t *ip)
- {
- unsigned char addr[4];
- char *p;
- int i, x;
- p = name;
- for(i=0; i<4 && *p; i++){
- x = strtoul(p, &p, 0);
- if(x < 0 || x >= 256)
- return -1;
- if(*p != '.' && *p != 0)
- return -1;
- if(*p == '.')
- p++;
- addr[i] = x;
- }
- switch(CLASS(addr)){
- case 0:
- case 1:
- if(i == 3){
- addr[3] = addr[2];
- addr[2] = addr[1];
- addr[1] = 0;
- }else if(i == 2){
- addr[3] = addr[1];
- addr[2] = 0;
- addr[1] = 0;
- }else if(i != 4)
- return -1;
- break;
- case 2:
- if(i == 3){
- addr[3] = addr[2];
- addr[2] = 0;
- }else if(i != 4)
- return -1;
- break;
- }
- *ip = *(uint32_t*)addr;
- return 0;
- }
复制代码 上面这段代码是把地址字符串转换为一个ip地址类型(uint32_t), 这里这个宏CLASS有什么用了,还有那个switch的逻辑是干什么用的,这段代码来自libtask. 谁能解释一下不? |
|