#include "deftype.h"

int make_base64(long long code,unchar dec[2+BLLONG+1],int base)
/* long long対応 2/8/10/16進数文字列作成 */
/* 一番長くなるのは２進数で６４ビット分＝６４バイト＋符号＋基数 */
/* base >0 : 正で処理 , base < 0 : 符号つきで処理 */
/* base+100 : 基数文字付き(base=2,8,16のみ) */
{
unint i=BLLONG+2,sgn=0,kisuu=0;
long long num;
static unchar b[]="0123456789ABCDEF";
	num=code;
	if (base<0) { /* 符号有り */
		if (code<0) {
			num=-code;
			if (num!=0) sgn=1; /* 負号有り */
		}
		base=-base;
	}
	if (base>100) {
		kisuu=1;
		base-=100;
	}
	dec[i]=0; /* EOS */
	while (num>=(long long)base) {
		dec[--i]=b[num%(long long)base];
		num/=(long long)base;
	} /* num<base */
	dec[--i]=b[num];
	if (kisuu) { /* 基数文字 */
		switch (base) {
			case  2:dec[--i]='%'; break;
			case  8:dec[--i]='@'; break;
			case 16:dec[--i]='$'; break;
		}
	}
	if (sgn==1) dec[--i]='-'; /* 負号 */
	return(i);
}
