int myatoi(const char *str) //将字符str转换为整数 { const char *p = NULL; int neg; //标志位,0代表负数,1代表正数 if (str[0] == '-') //str为负整数,置neg标志位为0 { neg = 0; p = ++str; //将字符串str字符串中的'-'去除,从str的第二位开始转化 } else //否则置neg标志位为1 { neg = 1; p = str; } int i_len = len(p); //调到字符串长度 int i_temp = i_len; int value = 0; int i = 0; for (; i < i_len; i++) //从str[0]开始遍历字符串 { value += (power10(i_temp - 1) * char2i(p[i])); i_temp--; } if (neg == 0) //str为负数 ,将转化后的字符串前 { return 0 - value; } else { return value; } }
/*----------------------------------------------------------string2int() Purpose: convert string (hex eg:ab or int eg: 234) to int Parameters: Input: - c:pointer to char: least significant digit of number - length: number of digits - base b = h : string represents hexa number d : string represents decimal number Output: w32 *num Return: 1 if error 0 if ok Output: *num - converted number */ int string2int(char *cstr,w32 length,w32 *num,char b){ int i; w32 digit,base,power; //printf("string2int: cstr%s len:%d base:%c\n", cstr, length, b); if(length <=0){ printf("string2int error: string length=%i <=0 \n",length); return 1; } if(cstr == NULL){ printf("string2int error: cstr=NULL \n"); return 1; } //printf("string2int start:%s strlength=%i \n",cstr,length); if(b == 'h') base=16 ; else if( b == 'd') base =10; else{ printf("string2int error: unknown base %cstr \n",b); return 1; } if(length>(2*sizeof(w32)) && b =='h'){ printf("string2int error: length=%i >2*sizeof(w32) \n",length); return 1; } if(length>9 && b == 'd'){ printf("string2int error: length=%i >2*sizeof(w32) \n",length); return 1; } *num=0; i=0; power=1; cstr= cstr + length-1; while(i<(int)length){ //printf("ss= %c \n",*cstr); if(char2i(*cstr,&digit) == 0) *num=*num+digit*power; else return 1; power=power*base; cstr--; i++; if(*cstr==' ') break; // ignore leading spaces }; //if((b =='h'))printf("num= 0x%x \n",*num);else printf("num= %i \n",*num); return 0; }