티스토리 뷰

C | C++

문자열의 정수 변환

야라바 2018. 6. 29. 11:40
728x90

☞ strtol, strtoul, strtoll, strtoull, atoi, atol, atoll

<math.h>
<stdlib.h>

long int strtol(const char *str, char **tailptr, int base);
unsigned long int strtoul(const char *str, char **tailptr, int base);
long long int strtoll(const char *str, char **tailptr, int base);
unsigned long long int strtoull(const char *str, char **tailptr, int base);
int atoi(const char *str);
long int atol(const char *str);
long long int atoll(const char *str);


str로 지정한 문자열에 있는 정수 데이터를 추출하여 int, long, long long 타입의 정수값을 리턴합니다. atoi(), atol(), atoll() 함수는 10진수 기반으로 문자열에 있는 정수 스트링을 변환하지만, strto...() 함수들은 2~36진수를 base로 지정하여(0이면 10진수 처리) 정수 스트링을 변환할 수 있고, tailptr을 NULL 포인터가 아니라 문자열 포인터의 포인터로 전달하면 변환된 다음 위치를 tailptr에 저장해 줍니다.



☞ 예제1

char *str = " 1234.5678";
char *ptr;

printf("\n%ld %ld ", atol(str), strtol(str, &ptr, 0));
printf("\n%s ", ptr);
</pre>
<pre class="brush:plain" style="margin-left: 2em;">
1234 1234
.5678


위의 예제를 보면 일단 atol()과 strtol()은 동일한 값을 리턴 합니다. 앞쪽의 isspace()로 구분되는 화이트 스페이스는 무시되고 base로 지정한 진수에(ato...은 10진수) 해당하는 문자열 정수를 찾습니다. 해당하는 정수가 없으면 0을 리턴합니다. strto...()의 경우 변환이 되지 않았으므로 tailptr도 이동되지 않습니다. 10진수 정수 변환인 경우 C언어 상수 지정 방법인 0으로 시작하는 8진수나 0x로 시작하는 16진수도 인식됩니다. 오버플로우 등을 확인하여 안전한 변환을 수행하려면 strto..() 함수를 사용하는 것이 적절합니다.




728x90

'C | C++' 카테고리의 다른 글

시간 측정  (0) 2018.06.29
문자열과 실수 변환  (0) 2018.06.29
산술 연산 함수  (0) 2018.06.29
정수 나누기 함수  (0) 2018.06.29
난수 함수  (0) 2018.06.29