📄 mp.c
字号:
#ifndef lintstatic char sccsid[] = "@(#)mp.c 2.1 88/08/15 4.0 RPCSRC Copyr 1988 Sun Micro";#endif/* * Sun RPC is a product of Sun Microsystems, Inc. and is provided for * unrestricted use provided that this legend is included on all tape * media and as a part of the software program in whole or part. Users * may copy or modify Sun RPC without charge, but are not authorized * to license or distribute it to anyone else except as part of a product or * program developed by the user. * * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. * * Sun RPC is provided with no support and without any obligation on the * part of Sun Microsystems, Inc. to assist in its use, correction, * modification or enhancement. * * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC * OR ANY PART THEREOF. * * In no event will Sun Microsystems, Inc. be liable for any lost revenue * or profits or other special, indirect and consequential damages, even if * Sun has been advised of the possibility of such damages. * * Sun Microsystems, Inc. * 2550 Garcia Avenue * Mountain View, California 94043 *//* * These routines add hexadecimal functionality to the multiple-precision * library. */#include <stdio.h>#include <mp.h>void mfree();/* * Convert hex digit to binary value */static intxtoi(c) char c;{ if (c >= '0' && c <= '9') { return(c - '0'); } else if (c >= 'a' && c <= 'f') { return(c - 'a' + 10); } else { return(-1); }}/* * Convert hex key to MINT key */MINT *xtom(key) char *key;{ int digit; MINT *m = itom(0); MINT *d; MINT *sixteen; sixteen = itom(16); for (; *key; key++) { digit = xtoi(*key); if (digit < 0) { return(NULL); } d = itom(digit); mult(m,sixteen,m); madd(m,d,m); mfree(d); } mfree(sixteen); return(m);}static charitox(d) short d;{ d &= 15; if (d < 10) { return('0' + d); } else { return('a' - 10 + d); }}/* * Convert MINT key to hex key */char *mtox(key) MINT *key;{ MINT *m = itom(0); MINT *zero = itom(0); short r; char *p; char c; char *s; char *hex; int size;#define BASEBITS (8*sizeof(short) - 1) if (key->len >= 0) { size = key->len; } else { size = -key->len; } hex = malloc((unsigned) ((size * BASEBITS + 3)) / 4 + 1); if (hex == NULL) { return(NULL); } move(key,m); p = hex; do { sdiv(m,16,m,&r); *p++ = itox(r); } while (mcmp(m,zero) != 0); mfree(m); mfree(zero); *p = 0; for (p--, s = hex; s < p; s++, p--) { c = *p; *p = *s; *s = c; } return(hex);}/* * Deallocate a multiple precision integer */voidmfree(a) MINT *a;{ xfree(a); free((char *)a);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -