본문 바로가기
개발 업무(코딩)-개발자였을때 썼던..

c-json 라이브러리에 대한 고찰과 소수점 짜르는 소스

by 주용사 2023. 1. 9.
728x90

c-json을 사용하면서 문제가 꽤 있었다.(json_object을 이용한 라이브러리)

1. 동적할당이라는 점

쓰는건 자유지만 free는 자유가 아니지...제일 짜증나는 상황이 발생한다.

2. 뒤에 tab이 들어가고 공백이 생긴다

3. 내가 원하는 대로 소수점 짜르기가 안된다.

난 소수점 2자리까지만 표시하고 싶은데 안되더라...내가 못찾아서 인가?

4. 익숙하지 않아서 인지 순서대로 무언가의 데이터 넣기가 생각보단...사람차이..

5. yum install 을 해야한다는 점이다.

하면되지 라고 생각할 수 있지만 신경써야할 부분이 하나 더 생긴다.

2번과 3번의 이유로 2가지 종류의 소스를 짰고 그중 하나는 이미 게시물을 올렸고 소수점짜르는 소스는 이 글에 같이 첨부한다.

----------------------------------

소수점 2자리로 짜르는 소스

int JSON_FLOOR_2F(char* pjson)
{
        int ncheck= 0;
        int nfloorcheck = 0;
        int ii =0;
        int nlen = strlen(pjson);
        int nascii = 0;
        int ncontinue = 0;
        for(ii = 0 ; ii < nlen ; ii++)
        {
                nascii = pjson[ii] +'0' -'0';
                /* str {str : " ",} double {double :  ,} */
                /* double don't have " -> checking double's format */
                if(nascii == 58) // :
                        ncontinue = 1;
                if(nascii == 32 && ncontinue == 1) // ' '
                        ncontinue = 2;
                if(nascii != 34 && ncontinue == 2) // "
                        ncontinue = 3;
                if(nascii == 34)
                        ncontinue = 0;

                if(ncontinue == 3 && pjson[ii] == '.')
                        ncheck = 1;

                if(ncheck == 1)
                {
                        if( (nascii <= 57 && nascii >= 48) || nascii == 46)
                                nfloorcheck++;
                        else
                        {
                                nfloorcheck = 0;
                                ncheck = 0;
                                ncontinue = 0;
                        }
                }
                if(nfloorcheck > 3 && nfloorcheck <= 7)
                {
                        pjson[ii] = 0x20;
                        if(nfloorcheck == 7)
                        {
                                nfloorcheck = 0;
                                ncontinue = 0;
                        }
                }
        }
        return 0;
}
728x90