c언어/c언어 (진수변환)
c언어[진수변환 함수](file출력)
byeol2ing
2017. 10. 17. 12:10
반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include<stdio.h> #include<stdlib.h> int main() { int i=0; int a=0; char com[5] = {0}; char start[13]={0}; char last[13]={0}; char startnumber[7]={0}; char lastnumber[7] ={0}; char*ptr; long svalue; long lvalue; FILE *wfp = fopen("output.txt","w"); printf("첫번째수:"); scanf("%s",start); printf("마지막수:"); scanf("%s",last); printf("comport :"); scanf("%s",com); for(i=0; i<6; i++) { startnumber[i]=start[6+i]; //startnumber 배열에 뒤에6자 받음 } for(i=0; i<6; i++) { lastnumber[i]=last[6+i]; //startnumber 배열에 뒤에6자 받음 } // printf(" 첫번째수 뒤에여섯글자 : %s\n",startnumber); // printf(" 마지막수 뒤에여섯글자 :%s\n",lastnumber); svalue = strtol(startnumber,&ptr,16); //16진수 문자열을 -> 10진수로 변경 lvalue = strtol(lastnumber,&ptr,16); // printf("%d\n",svalue); // printf("%d\n",lvalue); // printf("%06x\n",svalue); //10진수를 16진수로 출력 // printf("%06x\n",lvalue); for(a=svalue; a<=lvalue; a++) { fprintf(wfp,"%s %06x\n",com,a); } } | cs |
문제
입력 : abcdef000010 시작숫자
abcdef0000ff 끝숫자
com1 com숫자
출력 : com1 abcdef000010
com1 abcdef000011
com1 abcdef000012
.
.
.
com1 abcdef0000ff
*출력은 파일로 출력하시오.
여기서 가장 중요했던 함수는 진수변환하는 함수였습니다.
바로 "strtol"
이 함수에 대해 찾아보면
참조사이트 -> (http://forum.falinux.com/zbxe/?mid=C_LIB&page=9&document_srl=408138)
설명
숫자 문자열을 long형 숫자로 변환합니다. atoi()나 atol()과는 달리 (1) 변환하려는 진수를 선택할 수 있으며, (2) 숫자 문자가 아닌 문자를 만나면 그 포인터 위치를 구해 줍니다.
예로, "2007forum.falinux.com" 을 호출하게 되면,
char *str; char *ptr; long value; str = "2007forum.falinux.com"; value = strtol( str, &ptr, 10);
- value에는 2007이 들어 가고
- ptr에는 숫자로 변화하지 못하는 문자열의 시작 위치를 구해 줍니다.
만약 NULL을 넘겨주면 시작 위치를 구하지 않습니다.
헤더 | stdlib.h | |||||||
형태 | long strtol(const char *restrict str, char **endptr, int base); | |||||||
인수 |
| |||||||
반환 |
|
예제
#include <stdio.h> #include <stdlib.h> int main( void) { char *str; char *ptr; long value; str = "2007forum.falinux.com"; value = strtol( str, &ptr, 10); // 10진수로 변환 printf( "%s strtol =%ld str=%s\n", str, value, ptr); value = strtol( str, &ptr, 8); // 8진수로 변환 printf( "%s strtol =%ld str=%s\n", str, value, ptr); value = strtol( str, &ptr, 16); // 16진수로 변환 // 2007f까지 숫자로 변환이 됩니다. printf( "%s strtol =%ld str=%s\n", str, value, ptr); return 0; }
]$ ./a.out 2007forum.falinux.com strtol =2007 str=forum.falinux.com 2007forum.falinux.com strtol =1031 str=forum.falinux.com 2007forum.falinux.com strtol =131199 str=orum.falinux.com
strtol 함수는 원하는 진수로 받아서 10진수로 변경시켜주는 함수 입니다.
ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ
정말 유용합니다.
반응형