'memcpy'에 해당되는 글 1건
- 2007.07.01 메모리 직접 접근의 유용성 (memcpy) 3
메모리 직접 접근의 유용성 (memcpy)
Programming/C 2007. 7. 1. 23:59
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);
}
{
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;
}
{
int ts = 0;
memcpy(&ts,segment + offset,size);
return ts;
}
비슷하게 잘 작동하는듯 하다.... 좀 이상한가... 바꾸고 나니 왠지 불안하다...
값은 제대로 찍히는거 같은데.................
아 size가 클경우 overflow가 일어날수도 있을거 같은데.. 그거 처리도 해야하나?
근데...귀차나연...ㅋ
'Programming > C' 카테고리의 다른 글
좋은 프로그래밍 습관이란 책을 읽고. (0) | 2008.02.02 |
---|---|
오늘 할짓 없어서 한 뻘짓. (4) | 2008.01.24 |
리눅스에서 2기가 이상인 파일에 접근하기 (4) | 2007.06.28 |
Mpd 싱크 가사....... 프로그램 (8) | 2007.05.25 |
간단한 양방향 linkedlist (6) | 2007.05.11 |