lk里的经典c函数

来源:互联网 发布:手机cpu控制软件 编辑:程序博客网 时间:2024/05/17 07:54

lk里有很多经典的c语言函数,下面就是其中一些

第一个是将char* 类型转换成unsigend long类型

#include <stdlib.h>
#include <stdio.h>


int isdigit(int c)
{
return ((c >= '0') && (c <= '9'));
}


int isxdigit(int c)
{
return isdigit(c) || ((c >= 'a') && (c <= 'f')) || ((c >= 'A') && (c <= 'F'));
}
static int hexval(char c)
{
if (c >= '0' && c <= '9')
return c - '0';
else if (c >= 'a' && c <= 'f')
return c - 'a' + 10;
else if (c >= 'A' && c <= 'F')
return c - 'A' + 10;

return 0;
}
int main(int argc, char *argv[]) {
    char *num="200";
    int value = 0;
        printf("value=%d\n",*num); 
          printf("value=%c\n",*num); 
if (num[0] == '0' && num[1] == 'x') {
// hex
num += 2;
while (*num && isxdigit(*num))
value = value * 16 + hexval(*num++);
} else {
// decimal
while (*num && isdigit(*num))


value = value * 10 + (*num++  - '0');
                  


}
  


printf("value=%d\n",value); 
        return 0;
}


第二个是将一行字符串按照空格分开存储

typedef struct {const char *str;unsigned int u;int i;} cmd_args;static int tokenize_command(char *buffer, cmd_args *args, int arg_count){int pos;int arg;bool finished;enum {INITIAL = 0,IN_SPACE,IN_TOKEN} state;pos = 0;arg = 0;state = INITIAL;finished = false;for (;;) {char c = buffer[pos];if (c == '\0')finished = true;//printf("c 0x%hhx state %d arg %d pos %d\n", c, state, arg, pos);switch (state) {case INITIAL:if (isspace(c)) {state = IN_SPACE;} else {state = IN_TOKEN;args[arg].str = &buffer[pos];}break;case IN_TOKEN:if (finished) {arg++;goto done;}if (isspace(c)) {arg++;buffer[pos] = 0;/* are we out of tokens? */if (arg == arg_count)goto done;state = IN_SPACE;}pos++;break;case IN_SPACE:if (finished)goto done;if (!isspace(c)) {state = IN_TOKEN;args[arg].str = &buffer[pos];}pos++;break;}}done:return arg;}


0 0