l64a.c

来自「操作系统SunOS 4.1.3版本的源码」· C语言 代码 · 共 47 行

C
47
字号
#if !defined(lint) && defined(SCCSIDS)static	char sccsid[] = "@(#)l64a.c 1.1 92/07/30 SMI"; /* from S5R2 1.5 */#endif/*LINTLIBRARY*//* * convert long int to base 64 ascii * char set is [./0-9A-Za-z] * two's complement negatives are assumed, * but no assumptions are made about sign propagation on right shift * */#include <values.h>#define BITSPERCHAR	6 /* to hold entire character set */#define BITSPERLONG	(BITSPERBYTE * sizeof(long))#define NMAX	((BITSPERLONG + BITSPERCHAR - 1)/BITSPERCHAR)#define SIGN	(-(1L << (BITSPERLONG - BITSPERCHAR - 1)))#define CHARMASK	((1 << BITSPERCHAR) - 1)#define WORDMASK	((1L << ((NMAX - 1) * BITSPERCHAR)) - 1)static char buf[NMAX + 1];char *l64a(lg)register long lg;{	register char *s = buf;	while (lg != 0) {		register int c = ((int)lg & CHARMASK) + ('0' - 2);		if (c > '9')			c += 'A' - '9' - 1;		if (c > 'Z')			c += 'a' - 'Z' - 1;		*s++ = c;		/* fill high-order CHAR if negative */		/* but suppress sign propagation */		lg = ((lg < 0) ? (lg >> BITSPERCHAR) | SIGN :			lg >> BITSPERCHAR) & WORDMASK;	}	*s = '\0';	return (buf);}

⌨️ 快捷键说明

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