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);
인수
char *str정수로 변환할 문자열
char **endptr숫자로 변경하지 못하는 문자열의 시작 위치
int base문자열이 가지고 있는 숫자의 진수 (2~32)
반환
long10진 long형 정수 값

예제

#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진수로 변경시켜주는 함수 입니다.
ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 
정말 유용합니다.



반응형