본문 바로가기

작업일지/Windows CE

RETAILMSG의 Ascii출력.

WinCE에서 RETAILMSG사용시 문자열 출력시 유니코드 출력을 한다.
그러나 ASCII출력이 필요 할때도 있다.
그래서 간단하게 쓰려고 아래와같은 함수를 만들었다.

 void RETAILMSG_A(BOOL b, char* format, ...)
{

    int i, j;
    va_list list;
    va_start(list, format);

    if (!b)
        return;
    if (!format)
        return;

    for(i = 0 ; format[i] ; i++)
    {
        if(format[i] != '%')
            RETAILMSG(1, (L"%c", format[i]));
        else
        {
            switch(format[++i])
            {
            case 'c' :
                RETAILMSG(1, (L"%c", va_arg(list, int)));
                break;
            case 'i':
            case 'd' :
                RETAILMSG(1, (L"%d", va_arg(list, int)));
                break;
            case 'o':
                RETAILMSG(1, (L"%o", va_arg(list, int) ));
                break;
            case 'u':
                RETAILMSG(1, (L"%u", va_arg(list, int)));
                break;
            case 'e':
                RETAILMSG(1, (L"%e", va_arg(list, double)));
                break;
            case 'E':
                RETAILMSG(1, (L"%E", va_arg(list, double)));
                break;
            case 'f' :
                RETAILMSG(1, (L"%f", va_arg(list, double)));
                break;
            case 'F' :
                RETAILMSG(1, (L"%F", va_arg(list, double)));
                break;
            case 'x' :
                RETAILMSG(1, (L"%x", va_arg(list, int)));
                break;
            case 'X' :
                RETAILMSG(1, (L"%X", va_arg(list, int)));
                break;
            case 'p' :
                RETAILMSG(1, (L"%p", (void*)va_arg(list, int) ));
                break;
            case 's' :
                {
                    char* p = va_arg(list, char*);
                    if (p)
                    {
                        for (j=0; j<strlen(p); j++)
                            RETAILMSG(1, (L"%c", p[j]));
                    }
                    else
                    {
                        RETAILMSG(1, (L"(NULL)"));
                    }
                }
                break;
            default :
                break;
            }
        }
    }
    va_end(list);
}

아래와 같이 쓰인다.
int i=10;
char* s="string test";

 RETAILMSG_A(TRUE, "Test integer:%d, Test string:%s \r\n", i, s);