main() { int i = 5; char buf[1024] = {0x0,};
snprintf(buf, 4, "%d", i);
printf("%d\n", (int)buf[0]); }
결과 : 53 이 나옵니다. 원하는 결과 5 입니다.
왜 그럴까요? 머리가 굳어져서.. ㅋ...
buf[0]에 저장된 것은 5가 아니라 문자 '5'입니다. 아스키 코드셋에서는 53이죠. 그럼 문제는 문자 '5'를 숫자 5로 바꾸는 과정이 필요한데 sscanf를 쓰면 됩니다.
sscanf(buf, "%d", &i); printf("%d\n", i);
왠지 한 바퀴 돌아 제자리로 왔다는 느낌이.... :D
buf에 담긴 숫자를 얻으려면 printf("%d\n", atoi(buf));
근데 정말로 buf[0]에 있는 숫자만 알고 싶은거라면 printf("%d\n", isdigit(buf[0]) ? buf[0] - '0' : 0); 뭐 이정도...
처음에 snprintf에 %d 대신 %c 하세요. 그럼 원하시는 결과를 얻으실 수 있어요.
http://home.postech.ac.kr/~sodomau
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
buf[0]에 저장된 것은 5가 아니라 문자 '5'입니다.아스키 코드
buf[0]에 저장된 것은 5가 아니라 문자 '5'입니다.
아스키 코드셋에서는 53이죠. 그럼 문제는 문자 '5'를
숫자 5로 바꾸는 과정이 필요한데 sscanf를 쓰면 됩니다.
sscanf(buf, "%d", &i);
printf("%d\n", i);
왠지 한 바퀴 돌아 제자리로 왔다는 느낌이.... :D
buf에 담긴 숫자를 얻으려면 printf("%d\n", [b]at
buf에 담긴 숫자를 얻으려면
printf("%d\n", atoi(buf));
근데 정말로 buf[0]에 있는 숫자만 알고 싶은거라면
printf("%d\n", isdigit(buf[0]) ? buf[0] - '0' : 0);
뭐 이정도...
처음에 snprintf에%d 대신 %c 하세요.그럼 원하시는
처음에
snprintf에
%d 대신 %c 하세요.
그럼 원하시는 결과를 얻으실 수 있어요.
http://home.postech.ac.kr/~sodomau
댓글 달기