l64a.c

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C语言 代码 · 共 45 行

C
45
字号
/*	@(#)l64a.c	1.5	*//*	3.0 SID #	1.2	*//*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 + -
显示快捷键?