📄 stdlib.h
字号:
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 + -