basecvt.c
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:3k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  *  basecvt.c
  3.  *
  4.  *  Convert integer values specified on the command line from one input
  5.  *  base to another.  Accepts input and output bases between 2 and 36
  6.  *  inclusive.
  7.  *
  8.  * The contents of this file are subject to the Mozilla Public
  9.  * License Version 1.1 (the "License"); you may not use this file
  10.  * except in compliance with the License. You may obtain a copy of
  11.  * the License at http://www.mozilla.org/MPL/
  12.  *
  13.  * Software distributed under the License is distributed on an "AS
  14.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  15.  * implied. See the License for the specific language governing
  16.  * rights and limitations under the License.
  17.  *
  18.  * The Original Code is the MPI Arbitrary Precision Integer Arithmetic
  19.  * library.
  20.  *
  21.  * The Initial Developer of the Original Code is Michael J. Fromberger.
  22.  * Portions created by Michael J. Fromberger are 
  23.  * Copyright (C) 1998, 1999, 2000 Michael J. Fromberger. 
  24.  * All Rights Reserved.
  25.  *
  26.  * Contributor(s):
  27.  *
  28.  * Alternatively, the contents of this file may be used under the
  29.  * terms of the GNU General Public License Version 2 or later (the
  30.  * "GPL"), in which case the provisions of the GPL are applicable
  31.  * instead of those above.  If you wish to allow use of your
  32.  * version of this file only under the terms of the GPL and not to
  33.  * allow others to use your version of this file under the MPL,
  34.  * indicate your decision by deleting the provisions above and
  35.  * replace them with the notice and other provisions required by
  36.  * the GPL.  If you do not delete the provisions above, a recipient
  37.  * may use your version of this file under either the MPL or the GPL.
  38.  *
  39.  *  $Id: basecvt.c,v 1.1 2000/07/14 00:44:53 nelsonb%netscape.com Exp $
  40.  */
  41. #include <stdio.h>
  42. #include <stdlib.h>
  43. #include <string.h>
  44. #include "mpi.h"
  45. #define IBASE     10
  46. #define OBASE     16
  47. #define USAGE     "Usage: %s ibase obase [value]n"
  48. #define MAXBASE   64
  49. #define MINBASE   2
  50. int main(int argc, char *argv[])
  51. {
  52.   int    ix, ibase = IBASE, obase = OBASE;
  53.   mp_int val;
  54.   ix = 1;
  55.   if(ix < argc) {
  56.     ibase = atoi(argv[ix++]);
  57.     
  58.     if(ibase < MINBASE || ibase > MAXBASE) {
  59.       fprintf(stderr, "%s: input radix must be between %d and %d inclusiven",
  60.       argv[0], MINBASE, MAXBASE);
  61.       return 1;
  62.     }
  63.   }
  64.   if(ix < argc) {
  65.     obase = atoi(argv[ix++]);
  66.     if(obase < MINBASE || obase > MAXBASE) {
  67.       fprintf(stderr, "%s: output radix must be between %d and %d inclusiven",
  68.       argv[0], MINBASE, MAXBASE);
  69.       return 1;
  70.     }
  71.   }
  72.   mp_init(&val);
  73.   while(ix < argc) {
  74.     char  *out;
  75.     int    outlen;
  76.     mp_read_radix(&val, argv[ix++], ibase);
  77.     outlen = mp_radix_size(&val, obase);
  78.     out = calloc(outlen, sizeof(char));
  79.     mp_toradix(&val, out, obase);
  80.     printf("%sn", out);
  81.     free(out);
  82.   }
  83.   mp_clear(&val);
  84.   return 0;
  85. }