저번에 코드문제냈었던 숫자 1234 to 문자 "1234" 의

dopesoul의 이미지

요즘 한창 printf 함수를 제작하고있는데
n 진법의 format 으로 숫자를 인수로받아서
표준출력(임베디드 시스템이므로 uart 나 lcd 등...)
으로 뿌려주는 부분입니다. 저번에는 문자열을 뒤집는 부분이
마음에 안들었었는데 이러한 방법으로 하니 마음에 드는군요^^
하드웨어에 의존하는 back end 부분은 분리해 두었습니다.
아마 putchar,getchar 등이 될테지요.
임베디드 공부하시고 계시다면 한번쯤 제작하시는것도
공부에 도움이 될것 같네요.
동참하시려면 kldp.net 의 Standard I/O 어쩌구 하는
프로젝트로 휘릭~

char hexcode[16] = "0123456789ABCDEF";

void rprintfnum_(unsigned char base,long n,char numDigits,char padchar)
{
	char *p,buf[32];
	unsigned long x;
	unsigned char count,isSigned;

	// Convert negative to positive
	if(n<0)
	{
		isSigned = 1;
		x = -n;
	} else
	{
		isSigned = 0;
		x = n;
	}

	count = (numDigits-1) - (isSigned?1:0);
	p = buf + sizeof(buf);
	*--p = '\0';

	while(count--)
	{
		if(x!=0)
		{
			*--p = hexcode[x%base];
			x /= base;
		}
		else
		{
			*--p = padchar;
		}
	}

	if(isSigned == 1)
	{
		if(n<0)
		{
			*--p = '-';
		}
		else if(n > 0)
		{
			*--p = '+';
		}
		else
		{
			*--p = ' ';
		}
	}

	count = numDigits;

	while(count--)
	{
		putchar(*p++);
	}
}