strtol
strtol 함수는 정수로 구성된 문자열 str을 세번째 파라미터인 진수체계로 판단하여 long 형식 값으로 반환한다. 더이상 계산할 수 없는 문자를 발견하면 두번째 파라미터인 endptr에 해당 위치를 저장한다.
#include <stdlib.h>
long strtol (const char* str, char** endptr, int base);
- 파라미터
- str : long 형식 값을 구할 문자열
- endptr : 계산을 끝낸 위치를 저장할 문자열 포인터
- base : 진수
- 리턴 값 : 계산된 long 형식 값
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char src[100]="123 ff 16 1001 -10";
char *pos=NULL;
long value1=0,value2=0,value3=0,value4=0, value5=0;
value1 = strtol(src,&pos,10); // 10진수로 계산
value2 = strtol(pos,&pos,16); // 16진수로 계산
value3 = strtol(pos,&pos,8); // 8진수로 계산
value4 = strtol(pos,&pos,2); // 2진수로 계산
value5 = strtol(pos,&pos,10); // 음수값 10진수로 계산
printf("%ld %ld %ld %ld %ld\n",value1,value2,value3,value4, value5);
return 0;
}
✔️ 만약 변환이 멈춘 위치를 굳이 획득할 필요가 없다면 두 번째 인자에 그냥 NULL을 전달하면 된다.
✔️ strtol의 세번째 인자인 base에 0을 전달하면 문자열 앞부분을 검사하여 자동으로 적절한 진수를 선택한다. (단, 0x, 0X, 0 접두사는 처리하나 0b 접두사는 처리하지 못한다.)
- "0x1A" 또는 "0X1A": 16진수로 해석되어 값 26을 반환한다.
- "075": 8진수로 해석되어 값 61을 반환한다.
- "42": 10진수로 해석되어 값 42를 반환한다.
strtoul
strtoul 함수는 정수로 구성된 문자열 str을 세번째 파라미터인 진수체계로 판단하여 unsigned long 형식 값으로 반환한다. 더이상 계산할 수 없는 문자를 발견하면 두번째 파라미터인 endptr에 해당 위치를 저장한다.
#include <stdlib.h>
unsigned long strtoul(const char *nptr,char **endptr,int base);
- 파라미터
- str : unsigned long 형식 값을 구할 문자열
- endptr : 계산을 끝낸 위치를 저장할 문자열 포인터
- base : 진수
- 리턴 값 : 계산된 unsigned long 형식 값
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char src[100] = "123 ff 16 1001 8A7B6C5D";
char *pos = NULL;
unsigned long value1 = 0, value2 = 0, value3 = 0, value4 = 0, value5 = 0;
value1 = strtol(src, &pos, 10); // 10진수로 계산
value2 = strtol(pos, &pos, 16); // 16진수로 계산
value3 = strtol(pos, &pos, 8); // 8진수로 계산
value4 = strtol(pos, &pos, 2); // 2진수로 계산
value5 = strtol(pos, &pos, 16); // 16진수로 계산해서 16진수로 출력
printf("%lu %lu %lu %lu %08lX\n", value1, value2, value3, value4, value5);
return 0;
}
✔️ strtoul 함수는 문자열을 unsigned long 타입으로 변환하는 함수로 음수 값을 변환하려고 시도하는 경우 예상하지 못한 결과를 반환할 수 있으니 주의해야 한다.
이와 비슷한 기능으로 strtod, strtof, strtold, strtol, strtoll, strtoul, strtoull 함수가 존재한다.
string to double / float / long double / long / long long / unsigned long / unsigned long long 으로 구분하면 편하다.
'프로그래밍 > C' 카테고리의 다른 글
#ifdef 와 #if defined() 의 차이 (0) | 2023.01.31 |
---|---|
C ] sscanf() 사용법 (0) | 2023.01.15 |
C ] strtok, strtok_r : 구분 문자로 문자열 쪼개기 (0) | 2023.01.15 |
윈도우 소켓 ] 소켓 프로그래밍 용어 및 함수 정리 (0) | 2023.01.01 |
윈도우 소켓 ] TCP 에코 서버, 클라이언트 및 동작원리 (0) | 2023.01.01 |