/*:::::*/ FBCALL long long fb_hStr2Longint( char *src, int len ) { char *p; int radix; int skip; /* skip white spc */ p = fb_hStrSkipChar( src, len, 32 ); len -= (int)(p - src); if( len < 1 ) return 0; radix = 10; if( (len >= 2) && (p[0] == '&') ) { skip = 2; switch( p[1] ) { case 'h': case 'H': radix = 16; break; case 'o': case 'O': radix = 8; break; case 'b': case 'B': radix = 2; break; default: /* assume octal */ radix = 8; skip = 1; break; } if( radix != 10 ) { p += skip; #ifdef HOST_MINGW return fb_hStrRadix2Longint( p, len - skip, radix ); #endif } } /* strtoll() saturates values outside [-2^63, 2^63) so use strtoull() instead */ return (long long)strtoull( p, NULL, radix ); }
/*:::::*/ FBCALL int fb_hStr2Int( char *src, int len ) { char *p; int radix; int skip; /* skip white spc */ p = fb_hStrSkipChar( src, len, 32 ); len -= (int)(p - src); if( len < 1 ) return 0; else if( (len >= 2) && (p[0] == '&') ) { radix = 0; skip = 2; switch( p[1] ) { case 'h': case 'H': radix = 16; break; case 'o': case 'O': radix = 8; break; case 'b': case 'B': radix = 2; break; default: /* assume octal */ radix = 8; skip = 1; break; } if( radix != 0 ) return fb_hStrRadix2Int( &p[skip], len - skip, radix ); } /* atoi() saturates values outside [-2^31, 2^31) so use strtoul() instead */ return strtoul( p, NULL, 10 ); }
FBCALL unsigned int fb_hStr2UInt( char *src, ssize_t len ) { char *p; int radix, skip; /* skip white spc */ p = fb_hStrSkipChar( src, len, 32 ); len -= (ssize_t)(p - src); if( len < 1 ) return 0; radix = 10; if( (len >= 2) && (p[0] == '&') ) { skip = 2; switch( p[1] ) { case 'h': case 'H': radix = 16; break; case 'o': case 'O': radix = 8; break; case 'b': case 'B': radix = 2; break; default: /* assume octal */ radix = 8; skip = 1; break; } if( radix != 10 ) p += skip; } return strtoul( p, NULL, radix ); }