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

📄 fmtulong.c

📁 android-w.song.android.widget
💻 C
字号:
/* fmtulong.c -- Convert unsigned long int to string. *//* Copyright (C) 1998-2002 Free Software Foundation, Inc.   This file is part of GNU Bash, the Bourne Again SHell.   Bash is free software: you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation, either version 3 of the License, or   (at your option) any later version.   Bash is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with Bash.  If not, see <http://www.gnu.org/licenses/>.*/#ifdef HAVE_CONFIG_H#  include <config.h>#endif#if defined (HAVE_UNISTD_H)#  include <unistd.h>#endif#if defined (HAVE_LIMITS_H)#  include <limits.h>#endif#include <bashansi.h>#ifdef HAVE_STDDEF_H#  include <stddef.h>#endif#ifdef HAVE_STDINT_H#  include <stdint.h>#endif#ifdef HAVE_INTTYPES_H#  include <inttypes.h>#endif#include <chartypes.h>#include <errno.h>#include <bashintl.h>#include "stdc.h"#include <typemax.h>#ifndef errnoextern int errno;#endif#define x_digs  "0123456789abcdef"#define X_digs  "0123456789ABCDEF"/* XXX -- assumes uppercase letters, lowercase letters, and digits are   contiguous */#define FMTCHAR(x) \  ((x) < 10) ? (x) + '0' \	     : (((x) < 36) ? (x) - 10 + 'a' \			   : (((x) < 62) ? (x) - 36 + 'A' \					 : (((x) == 62) ? '@' : '_')))#ifndef FL_PREFIX#  define FL_PREFIX	0x01	/* add 0x, 0X, or 0 prefix as appropriate */#  define FL_ADDBASE	0x02	/* add base# prefix to converted value */#  define FL_HEXUPPER	0x04	/* use uppercase when converting to hex */#  define FL_UNSIGNED	0x08	/* don't add any sign */#endif#ifndef LONG#  define LONG	long#  define UNSIGNED_LONG unsigned long#endif/* `unsigned long' (or unsigned long long) to string conversion for a given   base.  The caller passes the output buffer and the size.  This should   check for buffer underflow, but currently does not. */char *fmtulong (ui, base, buf, len, flags)     UNSIGNED_LONG ui;     int base;     char *buf;     size_t len;     int flags;{  char *p;  int sign;  LONG si;  if (base == 0)    base = 10;  if (base < 2 || base > 64)    {#if 1      strncpy (buf, _("invalid base"), len - 1);      buf[len] = '\0';      errno = EINVAL;      return (p = buf);#else      base = 10;#endif    }  sign = 0;  if ((flags & FL_UNSIGNED) == 0 && (LONG)ui < 0)    {      ui = -ui;      sign = '-';    }  p = buf + len - 2;  p[1] = '\0';  /* handle common cases explicitly */  switch (base)    {    case 10:      if (ui < 10)	{	  *p-- = TOCHAR (ui);	  break;	}      /* Favor signed arithmetic over unsigned arithmetic; it is faster on	 many machines. */      if ((LONG)ui < 0)	{	  *p-- = TOCHAR (ui % 10);	  si = ui / 10;	}      else        si = ui;      do	*p-- = TOCHAR (si % 10);      while (si /= 10);      break;    case 8:      do	*p-- = TOCHAR (ui & 7);      while (ui >>= 3);      break;    case 16:      do	*p-- = (flags & FL_HEXUPPER) ? X_digs[ui & 15] : x_digs[ui & 15];      while (ui >>= 4);      break;    case 2:      do	*p-- = TOCHAR (ui & 1);      while (ui >>= 1);      break;    default:      do	*p-- = FMTCHAR (ui % base);      while (ui /= base);      break;    }  if ((flags & FL_PREFIX) && (base == 8 || base == 16))    {      if (base == 16)	{	  *p-- = (flags & FL_HEXUPPER) ? 'X' : 'x';	  *p-- = '0';	}      else if (p[1] != '0')	*p-- = '0';    }  else if ((flags & FL_ADDBASE) && base != 10)    {      *p-- = '#';      *p-- = TOCHAR (base % 10);      if (base > 10)        *p-- = TOCHAR (base / 10);    }  if (sign)    *p-- = '-';  return (p + 1);}

⌨️ 快捷键说明

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