최상단 광고

2012년 4월 15일 일요일

[C언어] 문자열을 숫자(정수 int long; 실수 double)로 변환하는 함수

컴퓨터에서는 같은 1234 라고 해도, 문자열로서의 1234 일 수도 있고, 진짜 숫자로서의 1234 일 수도 있습니다.

문자로서의 숫자를, 진짜 숫자로 바꾸어서 연산을 할 수 있게 해주는 함수들입니다.

atoi() : String To int


문자로 된 숫자를, 진짜 숫자의 정수로 변환
#include
#include

int main() {
  int num;
  char *s = "1234.9999";

  num = atoi(s);
  printf("문자 = %s\n숫자(int) = %d\n", s, num);

  return 0;
}


실행 결과:
문자 = 1234.9999
숫자(int) = 1234


만약 문자열에 소수점이 있다면 반올림하지 않고 소수점 이하를 무조건 무시합니다. 에러가 난다면 0을 반환합니다.
그래서 위의 소스가 만약 char *s = "ABCD"; 이렇게 되었다면 "숫자(int) = 0" 으로 출력됩니다.

atoi() 함수는 stdlib.h 에 정의되어 있습니다.



atol() : String To long


int 가 아닌 long형 정수로 변환할 때는 atol()을 사용합니다.
#include
#include

int main() {
  long num;
  char *s = "98765432";

  num = atol(s);
  printf("문자열 = %s\n숫자(long) = %ld\n", s, num);
  return 0;
}


실행 결과:
문자열 = 98765432
숫자(long) = 98765432




atof() : String To double


문자로 된 숫자를, 진짜 숫자의 실수로 변환
#include
#include

int main() {
  double f;
  char *s = "12345.67";

  f = atof(s);
  printf("문자열 = %s\n실수(double) = %0.3f\n", s, f);

  return 0;
}


실행 결과:
문자열 = 12345.67
실수(double) = 12345.670


atof() 함수는 double형 실수를 반환합니다. 그래서 이것을 float형 실수로 받으면
warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
이런 경고가 나오게 됩니다.




▶▶ [C언어] 숫자(정수;int, long, unsigned long)를 문자열로 변환하는 함수 - itoa()

▶▶ [C언어] 숫자(실수;float)를 문자열로 변환하는 함수 - sprintf()



16진수 문자열을 숫자로 변환: ▶▶ C언어] 헥사(HEX; 16진수) 문자열을, 10진수 정수 숫자로 변환 함수; Hex String to Int Number

2진수 문자열을 숫자로 변환: ▶▶ C언어] 2진수 문자열을, 10진수 정수 숫자로 변환 함수; Base-2 String to Int Number

댓글 없음: