⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdlib.h

📁 TI公司的CCS一些常用的函数库
💻 H
📖 第 1 页 / 共 2 页
字号:
            else
               result = (result << 4) + (c - 'A' + 10);

            c = s[index++];c = toupper(c);
         }
      }
   }

   if (base == 10 && sign == 1)
      result = -result;

   return(result);
}

/* A fast routine to multiply by 10
 */
signed int32 mult_with10(int32 num)
{
   return ( (num << 1) + (num << 3) );
}

signed int32 atoi32(char *s)
{
   signed int32 result;
   int sign, base, index;
   char c;

   index = 0;
   sign = 0;
   base = 10;
   result = 0;

   if(s)
      c = s[index++];

   // increase index if either positive or negative sign is detected
   if (c == '-')
   {
      sign = 1;         // Set the sign to negative
      c = s[index++];
   }
   else if (c == '+')
   {
      c = s[index++];
   }

   if (c >= '0' && c <= '9')
   {
      if (c == '0' && (s[index] == 'x' || s[index] == 'X'))
      {
         base = 16;
         index++;
         c = s[index++];
      }

      // The number is a decimal number
      if (base == 10)
      {
         while (c >= '0' && c <= '9') {
            result = (result << 1) + (result << 3);  // result *= 10;
            result += (c - '0');
            c = s[index++];
         }
      }
      else if (base == 16)    // The number is a hexa number
      {
         c = toupper(c);
         while ((c >= '0' && c <= '9') || (c >= 'A' && c <='F'))
         {
            if (c >= '0' && c <= '9')
               result = (result << 4) + (c - '0');
            else
               result = (result << 4) + (c - 'A' + 10);

            c = s[index++];c = toupper(c);
         }
      }
   }

   if (base == 10 && sign == 1)
      result = -result;

   return(result);
}

float strtod(char *s,char *endptr) {
   float pow10 = 1.0;
   float result = 0.0;
   int sign = 0, point = 0;
   char c;
   int ptr = 0;

   if(s)
   {
      c=s[ptr++];
   }

   while((c>='0' && c<='9') || c=='+' || c=='-' || c=='.') {
      if(c == '-') {
         sign = 1;
         c = s[ptr++];
      }

      while((c >= '0' && c <= '9') && point == 0) {
         result = 10*result + c - '0';
         c = s[ptr++];
      }

      if (c == '.') {
         point = 1;
         c = s[ptr++];
      }

      while((c >= '0' && c <= '9') && point == 1) {
         pow10 = pow10*10;
         result += (c - '0')/pow10;
         c = s[ptr++];
      }

      if (c == '+') {
         c = s[ptr++];
      }
   }

   if (sign == 1)
      result = -1*result;
   if(endptr)
   {
      if (ptr) {
         ptr--;
         *((char *)endptr)=s+ptr;
      }
      else
         *((char *)endptr)=s;
   }

   return(result);
}

long strtoul(char *s,char *endptr,signed int base)
{
   char *sc,*s1,*s2,*sd;
   unsigned long x=0;
   char sign;
   char digits[]="0123456789abcdefghijklmnopqstuvwxyz";
   for(sc=s;isspace(*sc);++sc);
   sign=*sc=='-'||*sc=='+'?*sc++:'+';
   if(sign=='-')
   {
      if (endptr)
      {
        *((char *)endptr)=s;
      }
      return 0;
   }

   if (base <0 || base ==1|| base >36) // invalid base
   {
      if (endptr)
      {
        *((char *)endptr)=s;
      }
      return 0;
   }
   else if (base)
   {
      if(base==16 && *sc =='0'&&(sc[1]=='x' || sc[1]=='X'))
         sc+=2;
      if(base==8 && *sc =='0')
         sc+=1;
      if(base==2 && *sc =='0'&&sc[1]=='b')
         sc+=2;

   }
   else if(*sc!='0') // base is 0, find base
      base=10;
   else if (sc[1]=='x' || sc[1]=='X')
      base =16,sc+=2;
   else if(sc[1]=='b')
      base=2,sc+=2;
   else
      base=8;
   for (s1=sc;*sc=='0';++sc);// skip leading zeroes
   sd=memchr(digits,tolower(*sc),base);
   for(s2=sc;sd!=0;++sc)
   {
      x=x*base+(int16)(sd-digits);
   }
   if(s1==sc)
   {
      if (endptr)
      {
        *((char *)endptr)=s;
      }
   return 0;
   }
   if (endptr)
        *((char *)endptr)=sc;
   return x;
}

signed long strtol(char *s,char *endptr,signed int base)
{
   char *sc,*s1,*s2,*sd;
   signed long x=0;
   char sign;
   char digits[]="0123456789abcdefghijklmnopqstuvwxyz";
   for(sc=s;isspace(*sc);++sc);
   sign=*sc=='-'||*sc=='+'?*sc++:'+';
   if (base <0 || base ==1|| base >36) // invalid base
   {
      if (endptr)
      {
        *((char *)endptr)=s;
      }
      return 0;
   }
   else if (base)
   {
      if(base==16 && *sc =='0'&&(sc[1]=='x' || sc[1]=='X'))
         sc+=2;
      if(base==8 && *sc =='0')
         sc+=1;
      if(base==2 && *sc =='0'&&sc[1]=='b')
         sc+=2;

   }
   else if(*sc!='0') // base is 0, find base
      base=10;
   else if (sc[1]=='x' || sc[1]=='X')
      base =16,sc+=2;
   else if(sc[1]=='b')
      base=2,sc+=2;
   else
      base=8;
   for (s1=sc;*sc=='0';++sc);// skip leading zeroes
   sd=memchr(digits,tolower(*sc),base);
   for(s2=sc;sd!=0;++sc)
   {
      x=x*base+(int16)(sd-digits);
   }
   if(s1==sc)
   {
      if (endptr)
      {
        *((char *)endptr)=s;
      }
   return 0;
   }
   if(sign=='-')
      x  =-x;
   if (endptr)
        *((char *)endptr)=sc;
   return x;
}

signed int system(char *string)
{
   return 0;
}

int mblen(char *s,size_t n)
{
   return strlen(s);
}

int mbtowc(wchar_t *pwc,char *s,size_t n)
{
   *pwc=*s;
   return 1;
}

int wctomb(char *s,wchar_t wchar)
{
   *s=wchar;
   return 1;
}

size_t mbstowcs(wchar_t *pwcs,char *s,size_t n)
{
   strncpy(pwcs,s,n);
   return strlen(pwcs);
}

size_t wcstombs(char *s,wchar_t *pwcs,size_t n)
{
   strncpy(s,pwcs,n);
   return strlen(s);
}

//---------------------------------------------------------------------------
// The random number implementation
//---------------------------------------------------------------------------

unsigned int32 _Randseed = 1;

long rand(void)
{
   _Randseed = _Randseed * 1103515245 + 12345;
   return ((unsigned long)(_Randseed >> 16) % RAND_MAX);
}

void srand(unsigned int32 seed)
{
   _Randseed = seed;
}

//---------------------------------------------------------------------------
// Searching and sorting utilities implementation
//---------------------------------------------------------------------------

typedef signed int (*_Cmpfun)(char * p1,char * p2);

void qsort(char * qdata, int qitems, int qsize, _Cmpfun cmp) {
   int m,j,i,l;
   short done;
   BYTE t[16];

   m = qitems/2;
   while( m > 0 ) {
     for(j=0; j<(qitems-m); ++j) {
        i = j;
        do
        {
           done=TRUE;
           l = i+m;
           if( (*cmp)(qdata+i*qsize, qdata+l*qsize) > 0 ) {
              memcpy(t, qdata+i*qsize, qsize);
              memcpy(qdata+i*qsize, qdata+l*qsize, qsize);
              memcpy(qdata+l*qsize, t, qsize);
              if(m <= i)
                i -= m;
                done = FALSE;
           }
        } while(!done);
     }
     m = m/2;
   }
}


char *bsearch(char *key, char *base, size_t num, size_t width,_Cmpfun cmp)
{
   char *p, *q;
   size_t n;
   size_t pivot;
   signed int val;

   p = base;
   n = num;

   while (n > 0)
   {
      pivot = n >> 1;
      q = p + width * pivot;

      val = (*cmp)(key, q);

      if (val < 0)
         n = pivot;
      else if (val == 0)
         return ((char *)q);
      else {
         p = q + width;
         n -= pivot + 1;
      }
   }

   return NULL;      // There's no match
}


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -