메모리 직접 접근의 유용성 (memcpy)


Before
전형적인 막장짓..
초기화 -> 거꾸로 값 받아서 배열에 삽입 -> 포맷에 맞게 sprintf를 써서 -> 문자열로 만들고
-> 그걸다시 sscanf써서 -> 정수로 변환후 -> 리턴..
unsigned int  atox(char *string)

     unsigned int ret;

     sscanf(string,"%x",&ret);

    return ret;
}

 unsigned int get_value(unsigned char *segment,int offset,int size)
{
    int i;
    char temp[size * 2 + 1];
    unsigned char dt[size];
    temp[size * 2] = '\0';

    for(i = 0;i < size;i ++)
        /* 리틀 엔디언 */
        dt[size - i - 1] = *(segment + offset + i);

    if(size == 1)
        sprintf(temp,"%02x",dt[0]);
    else if(size == 2)
        sprintf(temp,"%02x%02x",dt[0],dt[1]);
    else if(size == 3)
        sprintf(temp,"%02x%02x%02x",dt[0],dt[1],dt[2]);
    else if(size == 4)
        sprintf(temp,"%02x%02x%02x%02x",dt[0],dt[1],dt[2],dt[3]);

    return atox(temp);
}

After
몰라 걍 직접 집어넣어 버려....; 왜 진작 이걸 생각 못했을까?
역시 메모리에 직접 접근해서 하는게 더 편하다.
unsigned int get_value(unsigned char *segment,int offset,int size)
{
    int ts = 0;
  
    memcpy(&ts,segment + offset,size);

    return ts;
}

비슷하게 잘 작동하는듯 하다.... 좀 이상한가... 바꾸고 나니 왠지 불안하다...
값은 제대로 찍히는거 같은데.................

아 size가 클경우 overflow가 일어날수도 있을거 같은데.. 그거 처리도 해야하나?
근데...귀차나연...ㅋ