전체 글: 407개의 글

CDMA 1x EVDO의 정의

Posted by ironmask84
2010. 12. 2. 14:29 컴퓨터공학/통신 기술



CDMA 1x EVDO의 정의

CDMA 2000 1x EV-DO(1x-Evolution-Data Only)는 `꿈의 이동통신`이라고 불렸던 IMT-2000을 실현할 첫번째 기술입니다. 퀄컴이 기존의 CDMA기술을 이용하여 개발한 고속 무선데이터 전송 기술로 기존의 CDMA 규격과 망을 대부분 그대로 이용하면서 빠른 인터넷 사용이 가능합니다. 다운로드 2.4Mbps, 업로드 307.2Kbps의 속도로 유선에서 사용되는 ADSL방식과 똑같이 무선에서도 구현되고 있습니다.

퀄컴은 CDMA One과 CDMA 2000 기술을 상용화시킨 경험으로 `고속 무선인터넷 서비스`(일명 High Data Rate)를 개발했으며 유럽의 표준인 비동기식 IMT-2000에 대응하고자 이를 1x EV라고 칭하고(1X EV는 크게 1x EVDO와 1x EVDV가 있습니다). 현재 Phase1규격인 EVDO는 규격이 완료되어 한국에서 상용화가 되었고 일본 등이 상용화를 거의 완료한 상태입니다. Phase2규격인 IX EVDV는 현재 규격 논의가 한창이며 최근 규격제정에 한국의 삼성, LG등 대기업이 많은 영향력을 행사하고 있다는 뉴스를 접할 수 있습니다. 특히 EVDV는 고속 무선 데이터와 음성을 동시에 향상시킨 사실상의 동기식 IMT-2000입니다. (한국의 경우 LG 텔레콤이 준비중인 동기식 IMT-2000 서비스가 CDMA 1X EVDV와 3x EV입니다)

SK 텔레콤이 2000년 10월에  시작한 CDMA 1X의 경우, 원칙적으로 음성위주의 프로토콜을 기반으로 다소 변형적인 고속 Packet 데이터 서비스를 구현하고 있으므로 전송속도에는 기본적으로 한계가 있었습니다. 그러나, Ix EVDO의 고속 데이터 전송기술을 사용하면 보다 빠른 속도의 데이터 전송이 가능해져 현재의 June, Fimm과 같이 실시간 동영상 서비스나 멀티미디어 다운로드가 가능해 졌습니다. 현재 June, Fimm의 가입자는 CDMA2000과 1x EV e동시사용(듀얼 모드) 단말기를 이용하여 평상시에는 CDMA 2000으로 음성 서비스를 받고, 필요할 때만 EV모드로 전환하여 고속 무선데이터 서비스를 이용하고 있습니다.


CDMA 1x EVDO와 이전 네트워크의 비교

 기존에 서비스를 제공했던 IS-95A/B및 CDMA2000 1x를 EVDO와 비교하면 위의 표처럼 표현해 볼 수 있습니다. 1x EVDO는 기존의 IS-2000무선 프로토콜과는 완전히 다른 고속 데이터 전송만을 위한 전용 규격으로서 최대 전송속도가 2.4M까지 가능하며, 시스템을 구현할 때도 기지국 장치를 별도로 설치하고, 나머지 시스템 및 망 구성요소는 이전 네트워크의 장비를 공통으로 사용합니다. 서비스 측면에서는 `Wireless IP`로 기지국에서 교환기나 기지국 제어기를 거치지 않고 바로 인터넷 망에 접속을 하도록 설계되어 있어 음성위주로 구현된 교환기를 거치지 않으므로 고속 데이터 서비스의 효율을 극대화 시킬 수 있습니다. 이러한 무선 전송을 가능하게 해주는 퀄컴의 모뎀 칩은 MSM4500부터 가능한데, 일반적으로 사용되고 있는 MSM5500 이상의 칩은 앞서 말씀 드린 것 같이 cdma2000 1x와 Cdma2000 1x EVDO을 동시에 지원하는 Dual Mode 방식입니다. 



내용 중에 이해가 안 되는 부분이 있으시다면?

지난 회까지 우리는 `무선 인터넷의 정의`와 `무선 인터넷의 산업`을 알아보았고 기술적으로 어떤 방향성을 가지고 무선인터넷이 발전해 가는지를 `무선인터넷 접속방식의 발전`을 통해서 살펴보았습니다. 이번 시간부터는 CDMA 1x EVDO, W-CDMA, 휴대인터넷 등 점 더 심화된 내용을 접근하게 될 것입니다. 구체적인 내용 중에서 기술적인 용어의 `낮설음`때문에 주저하실 필요는 없습니다. 무선인터넷을 얘기할 때 사용되는 기술용어나 개념은 계속해서 반복되기 때문입니다. 내용 중에 이해가 안 되는 부분이 있으시다면 앞의 무선인터넷 관련 글을 다시 한번 읽어보시거나 아래의 몇 가지 사항을 숙지하시면 도움이 될 것으로 생각됩니다. (또한, IT라는 것이 크게 통신과 인터넷으로 구분되고 사용되는 용어들이 거의 유사하며 두 분야가 통합되어 가고 있으므로 인터넷으로 모르는 용어를 검색하시면 대부분 찾아보실 수 있습니다.) 



1)환과 패킷교환은 아래와 같은 의미가 있었습니다.


회선교환 전송방식 (Circuit)

회선교환 전송방식이란 송수신 단말기간의 데이터를 전송할 때 무선자원을 할당 받아 데이터 전송이 종료할 때까지 무선자원을 계속해서 점유하고 있으므로, 음성통화와 마찬가지로 통화요금이 접속시간에 비례하여 과금 됩니다. 또한 점유하는 무선자원을 통해 실시간 데이터를 송수신할 수 있습니다. 현재 우리가 쓰고 있는 음성통화는 회선교환 방식이며 IMT-2000의 영상통화도 회선 교환방식을 이용하여 구현합니다. (현재 EVDO 서비스의 화상통화는 패킷교환 방식입니다) 만약 통신사업자가 사용자가 많을 것으로 예상되어 대규모 투자를 하는데 주저하지 않는다면 영상통화가 지금의 음성통화와 같이 굉장히 값싸고 질적으로도 우수한 회선 교환방식으로 이용될 것입니다. 실제로 현재 구현되고 있는 시험용 IMT-2000 영상 전화 시스템은 회선 교환방식으로 개발되고 있고 국제 규격도 이를 추천하고 있습니다.

패킷 교환 전송방식 (Packet)

패킷 교환 전송방식이란 송수신 단말기간의 데이터를 전송할 때마다 무선자원을 할당 받아 사용하며, 전송 데이터가 없는 경우에는 자원을 할당 받지 않으므로 자원의 활용 차원에 매우 효율적입니다. 패킷 교환 전송은 패킷(꾸러미)를 128byte, 256byte, 512byte 단위로 묶어서 순서대로 전송합니다. 따라서 전송된 패킷 단위로 과금 되므로 회선교환 방식에서 회선 시간에 비례한 과금 방식보다 매우 경제적이나, 패킷 교환 전송방식은 패킷을 전송 할 때마다 무선자원을 할당 받는 절차가 필요하므로 실시간성으로 데이터를 주고 받는 데는 적합하지 않습니다.

중요 용어

IWF(Inter working Function)
무선 시스템과 전화망 사이에서 데이터를 전송하는 기법으로 이동통신 시스템과 인터넷을 연결하기 위한 무선 데이터 장치를 말합니다.

PSTN(Public switched telephone network)
국내 유선전화 교환기를 합니다.

BSC(BTS System Controller)
기지국 제어기로 기지국이 통제하는 범위내의 이동전화 등록, 제어 및 트래픽 채널 할당, 핸드오프 수행, 호 설정과 종결의 처리를 가능하게 해주는 장비와 소프트웨어를 말합니다.

BTS(Base Transceiver Station)
기지국 장비로 안테나와 모뎀으로 구성되며, CMDA의 복잡한 무선 채널 정합 및 전력 제어 등을 담당합니다. 지상에 설치되어 있는 BTS는 각각의 무선접속 시스템을 통해 이동단말기와의 무선통신을 가능하게 하고, 전송경로에 위치해 있는 연결된 BSC와 신호를 송수신한다. 20~40여 개의 BTS가 하나의 BSC와 연결되어 있습니다.

HLR(Home Location Register)
이동가입자의 위치를 관리합니다. HLR에는 가입자 정보(각종 부가서비스 가입내역 포함)와 이동장치 정보의 두 유형의 정보가 담겨 있습니다. 
 

CDMA2000 1X EVDO의 비교

Posted by ironmask84
2010. 12. 2. 14:26 컴퓨터공학/통신 기술



1. 개요

○ Cdma2000 1x EVDO는 Evolution Data Only의 약칭인 동기식 데이터 이동통신 방식으로 데이터 전송속도가 -최고 2.4Mbps로 데이터 전송에 한해 고속전송이 가능해 “DO"라는 이름이 붙여졌으며 HDR(High Data Rate)이라고도 함

○ CDMA기술을 이용하여 퀄컴이 개발한 패킷 무선 데이터 전송 신기술로서 IS95A,B를 모두 수용하는 메가급 고속데이터 전송이 가능한 순방향으로 최대 2.4Mbps이며 역방향은 307.2Kbps의 전송속도를 지님

○ HDR은 기존 IS95망에서 Data Core Network을 통한 Data 전용 인터넷을 연결하는 것으로 3세대망에서도 Data 전송속도를 기존속도와 똑같이 지원할 수 있음

 

2. 데이터 채널 링크

가. 순방향 데이터 채널링크

○ HDR의 순방향 데이터 채널링크는 Pilot 채널, MAC채널, Control 채널, Traffic 채널로 구성됨

○ HDR은 패킷회선방식으로 Pilot 신호를 감지하고 있다가 전송이 필요할때만 회선을 포착하여 전송하고 송수신이 없을때에는 회선을 포착하지 않음

○ 순방향 트랙픽 채널은 38.4kbps ~ 2,476Mbps 사이의 가변 데이터 전송율을 제공하며, 1FA당 한 순간에는 하나의 사용자 데이터만 전송이 가능하며, 여러 사용자에게 데이터를 시간상으로 스케쥴링하여 전송

채널링크
------
Pilot
-액세스 터미널에서 동기획득에 사용
MAC 채널
-media Access Control 채널로 Reverse Power Control 채널과 Reverse Activity 채널이
-있음
Control 채널
-방송메세지 또는 특정 엑세스 터미널을 향한 메시지를 송신함
-전송율은 38.4kbps 또는 76.8kbps 사용
Traffice 채널
-액세스 터미널이 순수한 데이터를 전송하는데 사용

나. 역방향 데이터 채널링크

○ HDR의 역방향 데이터 태널링크는 순방향 링크보다 매우 복잡한 구조로 Access 채널, Traffic 채널,
-- ACKnowledge 채널로 구성됨

○ 역방향

심사항목
내용
-Access 채널
-링크가 연결되지 않은 상태에서 기지국과 연결하기 위해서 사용됨
Traffic 채널
-단말기에서 기지국으로 전송되는 역방향으로 데이터를 전송할 때 사용함
ACK 채널
-물리계층 하이브리드 ARQ 동적을 위해 순방향으로부터 수신된 데이터에 대한
- ACK는 보낼때 사용함

3. 네트워크 구조

○ HDR은 고속패킷 전송만을 위해 최적화된 시스템으로 IS95 시스템과 동일한 주파수대역인 1.25㎒를 사용함

○ IS95의 BSC나 MSC 같은 네트워크 변형없이 단지 AP(Access Point)를 기지국에 추가함으로 구현이 가능함

○ AP는 iS95의 기지국 기능을 수행하는 장비로 내부에 IS-95의 BSC와 MSC기능을 포함함

○ 추가장비는 단지 인터넷 연결을 위한 라우터 장비와 요금과금, 사용자 인증, 사업자의 데이터 서비스를 위한 추가적인 네트워크 장비임

 

4. Cdma 2000 1x와 비교

구분
cdma2000 1x
cdma2000 1x EVDO
속도
144Kbps
2.4Mbps
서비스
음성, 동영상
초고속데이터(음성도 가능)
이동성
제한적
제한적
주파수
셀룰러-800㎒
PCS-1.9㎓
셀룰러-800㎒
PCS-1.9㎓
시기
2000.10.1
2002.1.28
서비스
무선동영상
포토메일
고품질 무선동영상
화상전화
멀티미디어 메시지

 

 

cdma2000 1x EVDO의 초간단 정의

Posted by ironmask84
2010. 12. 2. 14:20 컴퓨터공학/통신 기술



  • 3세대형 이동통신/ 1.25㎒ 협대역(주파수)에서 최대 2.4Mbps급 데이터 전송속도를 구현
  • ‘휴대형 비대칭디지털까입자회선(ADSL)’.
    • 이 기술은 현존하는 이동통신 서비스 중 처음으로 수Mbps급 데이터 전송속도를 구현, 세계 통신업
      계의 이목 집중
    • 이에 따라 ADSL이 유선 인터넷 대중화의 기폭제가 됐듯이 EVDO에 대한 기대 상승
  • 지난 2월 우리나라에서 처음 서비스를 도입.
  • 지난 99년 미국 퀄컴이 시험통화에 성공하고 2002년 2월 SK텔레콤이 대중서비스의 전기를 마련
  • 고속 패킷 전송에 적합하도록 시스템을 최적화, 문자·영상·음악 등의 데이터를 최대 2.45Mbps급 속도로 전송
    • cdma2000 1x보다 20배 정도 빠른 이동통신을 구현.
  • 호환성양호 -코드분할다중접속(CDMA)방식 이동통신망에서 음성통화용 핵심망을 거치지 않고 별도의 인터넷망으로 데이터를 보낼 수 있기 때문
    • 동기(북미)식 기술이어서 IS95A/B, cdma2000 1x 통신망과 데이터를 호환, 기존 이동통신 시스템을 업그레이드하기에 적합한 것도 장점
    • 망 포설작업이 마무리단계에 이른 cdma2000 1x 시스템(네트워크)를 그대로 사용할 수 있는 것. 따라서 초기 설비투자비용을 최소화
  • 동기식 이동통신 국제표준화기구(3GPP2) 2000년 10월 cdma2000 1x EVDO를 공식 기술표준으로 채택
    • 궁극적으로 3세대 이동통신시대가 열린 셈
  • 데이터 전송속도가 2Mbps 이상으로 빨라짐에 따라 휴대폰으로 멀티미디어서비스, 영상회의, 초고속 인터넷을 즐길 수 있을 전망
  • 지난 96년 이후로 전성기를 구가한 2세대 코드분할다중접속(CDMA)방식 이동통신(IS95A·B)은 최대 64Kbps 속도로 데이터를 전송한다. 주로 단문메시지서비스(SMS), 개인정보관리(PIMs), PCMCIA타입 모뎀을 사용해 저속 인터넷에 접속할 수 있다. 그러나 64Kbps급 데이터 전송속도로는 무선 인터넷을 구현하는 데 한계가 있다.
  • CDMA에 이어 3세대 이동통신의 첫 단추를 꿴 것이 cdma2000 1x
    • 회선 데이터 전송방식을 이용했던 CDMA와 달리 패킷 데이터 전송방식을 채택, 전송속도가 144Kbps급으로 올라선 것
    • 이로써 휴대폰 안으로 컬러 콘텐츠, 플러그인게임, m커머스를 불러들였다.
  • 미국 퀄컴은 올해부터 cdma2000 1x와 cdma2000 1x EVDO를 동시에 지원하는 모바일스테이션모뎀(MSM) 5500칩을 공급
    • 이 칩을 통해 데이터는 cdma2000 1x EVDO 네트워크로, 음성은 cdma2000 1x 네트워크로 송수신하는 것.
    • 더불어 MSM 5500칩이 광역측위시스템(GPS)과 블루투스 기능을 지원함으로써 휴대폰을 만능기기로 탈바꿈시킬 태세

출처 : https://blog.naver.com/PostView.nhn?blogId=041022jh&logNo=60009406165


 

Sprintf 함수

Posted by ironmask84
2010. 11. 24. 14:15 컴퓨터공학/C언어 레퍼런스


sprintf
#include <stdio.h> // C++ 에서는 <cstdio>

int sprintf ( char * str, const char * format, ... );


str 에 데이터를 형식에 맞추어 쓴다.
str 가 가리키는 배열에 형식 문자열에 지정한 방식 대로 C 문자열을 쓴다. 쉽게 설명하자면, printf 에서 화면에 출력하는 대신에 화면에 출력할 문자열을 인자로 지정한 문자열에 쓴다는 것이다. 이 때, 인자로 지정한 배열의 크기는 배열에 쓰여질 문자열의 크기 보다 커야만 한다. 주의할 점은 sprintf 함수는 자동적으로 str 맨 마지막에 NULL  문자를 붙이기 때문에 항상 한 칸의 여유가 있어야 한다.

   인자
 

str

C 문자열이 저장될 char 배열을 가리키는 포인터
 
format

위 str 에 쓰여질 문자열을 포함하는 형식 문자열으로, 이는 형식 태그를 포함할 수 있다. 이 때, 형식 태그는 부수적 인자로 지정한 데이터와 치환되어 쓰여지게 된다. 이 때, 데이터가 치환되는 방식은 형식 태그에 의해 좌우된다. 따라서 부수적 인자의 개수는 적어도 형식 문자열에 사용된 형식 태그의 수 보다 많아야 한다.
  • 형식 태그는 아래와 같이 생겼다.

  • %[플래그(flag)][폭(width)][.정밀도][크기(length)]서식 문자(specifier)

  • 이 때 서식 문자(specifier) 는 대응하는 인자를 어떠한 형태로 표현할지를 결정하는데에 가장 중요한 역할을 한다.

  • 서식문자 출력 형태

    c 문자
    a
    d or i 부호 있는 십진법으로 나타난 정수 392
    e 지수 표기법(Scientific notation) 으로 출력하되, e 문자를 이용한다.
    3.9265e+2
    E 지수 표기법(Scientific notation) 으로 출력하되, E 문자를 이용한다. 3.9265E+2
    f 십진법으로 나타낸 부동 소수점 수
    392.65
    g %e 나 %f 보다 간략하게 출력 392.65
    G %E 나 %f 보다 간략하게 출력 392.65
    o 부호 있는 팔진수
    610
    s 문자열
    sample
    u 부호없는 십진법으로 나타낸 정수
    7235
    x 부호없는 16 진법으로 나타낸 정수 (소문자 사용)
    7fa
    X 부호없는 16 진법으로 나타낸 정수 (대문자 사용)
    7FA
    p 포인터 주소
    B800:0000
    n 아무것도 출력하지 않는다. 그 대신, 인자로 부호 있는 int 형을 가리키는 포인터를 전달해야 되는데, 여기에 현재까지 쓰여진 문자 수가 저장된다.
    % % 다음에 %를 또 붙이면 stdout 에 % 를 출력한다.

  • 위 서식 문자를 이용한 다양한 출력 형태는 아래와 같다.

  • #include <stdio.h>
    int main()
    {
        int integer = 123;
        char character = 'c';
        char string[] = "hello, world";
        int* pointer = &integer;
        double pi = 3.141592;
        char buf[100];
        

        sprintf(buf, "integer : (decimal) %d (octal) %o \n", integer, integer);
        printf("%s \n", buf);

        sprintf(buf,"character : %c \n", character);
        printf("%s \n", buf);

        sprintf(buf,"string : %s \n", string);
        printf("%s \n", buf);

        sprintf(buf,"pointer addr : %p \n", pointer);
        printf("%s \n", buf);

        sprintf(buf,"floating point : %e // %f \n", pi, pi);
        printf("%s \n", buf);

        sprintf(buf,"percent symbol : %% \n");
        printf("%s \n", buf);

        return 0;

  • 출력 결과


  •    형식 태그에는 위 말고도 플래그, 폭, .정확도, 제한자(modifier), 부-서식문자(sub-specifiers) 에 관련된 정보들이 포함될 수 있다. 먼저 플래그를 살펴보면 플래그는 기본적으로 출력되는 형태에 대해 조금 더 자세하게 지정할 수 있게 해준다. 플래그는 아래와 같다.

    플래그 설명
    - 폭에 맞추어 왼쪽 정렬을 하여 출력한다. - 를 붙이지 않는다면 기본적으로 오른쪽 정렬이 되어 출력한다. (아래 폭 지정자 참조).
    + 출력 결과값이 양수인 경우라도 + 기호를 앞에 붙여서 출력하도록 한다. (물론 음수면 자동적으로 - 가 붙는다). 기본적으로 지정하지 않았을 경우 음수에만 앞에 - 가 붙는다. 
    (공백) 앞에 부호가 붙지 않는다면 한 칸을 띄어서 출력한다. (다시말해 123 은 " 123" 으로 출력되고 -123 은 "-123" 으로 출력된다)
    #
    o, x, X 서식 문자들과 사용되면 출력되는 값 앞에 각각 0, 0x, 0X 가 붙게 된다. (이 때 0 은 제외한다)
    e, E, f 서식 문자들과 사용되면 소수점 아래 수들이 없음에도 불구하고 강제적으로 소수점을 붙이도록 한다. 원래 소수점 아래 수들이 없다면 소수점을 붙이지 않는다.
    g 와 G 서식 문자들과 사용되면 e 와 E 일때와 동일한 작업을 하지만 소수들의 뒷부분에 붙는 0 들 (123.1200 등) 은 제거되지 않는다. 
    0 수들을 왼쪽으로 정렬하되 빈 칸을 삽입하는 대신에 0 을 삽입한다. (폭 지정자 참조)

  •   폭은 말그대로 출력되는 데이터의 폭을 지정해준다. 참고로 여기서의 폭(width)은 뒤에 나오는 길이(length) 와는 완전히 다른 개념이므로 유의 하시기 바란다.


  • 설명
    (수) 출력할 최소의 문자 개수. 만일 이 수 보다 출력할 수 보다 작다면 빈칸을 삽입하여 길이를 맞춘다. 대신에, 이 수 보다 출력할 수가 큰 수의 경우 잘려서 출력되지는 않는다.
    * 폭을 형식 문자열에 지정해서 받지 않지만, 그 대신에 형식 문자열 뒤에 오는 인자들에 넣어서 받는다. 이 때, 이는 정수 값이여야 하며 폭을 지정하는 변수 뒤에 출력할 데이터가 위치하면 된다.

  • /* 사용 예 */
    #include <stdio.h>
    int main()
    {
        FILE *fp = fopen("output.txt", "w");
        char buffer[100];
        int i = 123;
        int j = -123;
        double f = 3.141592;

        sprintf(buffer, "폭 맞추기 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %6d \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "i : %7d \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "i : %2d \n\n", i);
        fputs (buffer, fp);

        sprintf(buffer, "왼쪽 정렬 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %5d끝 \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "오른쪽 정렬 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %-5d끝 \n\n", i);
        fputs (buffer, fp);

        sprintf(buffer, "# 문자의 사용 \n");
        fputs (buffer, fp);
        sprintf(buffer, "i : %#x \n", i);
        fputs (buffer, fp);
        sprintf(buffer, "i : %#X \n\n", i);
        fputs (buffer, fp);

        sprintf(buffer, "부호 붙이기 \n");
        fputs (buffer, fp);
        sprintf(buffer, "%+d, %+d \n", i,j);
        fputs (buffer, fp);
        return 0;
    }

  • 출력 결과

  • 파일에 쓰여진 모습

  • 정밀도는 말그대로 수치 데이터를 출력할 때 어떠한 정밀도로 출력하는지 (즉, 몇 자리 까지 출력해야 되는지) 를 지정해준다. 참고적으로 정밀도를 나타낼 때, 앞에 꼭 마침표(.) 을 찍는 것을 잊지 말기 바란다. 마침표를 찍는 이유는 앞에 폭과 구분을 하기 위해서 이다.

  • . 정밀도 설명
    .숫자 정수 지정자 (d,i,o,u,x,X) 의 경우 : 정밀도는 출력되야할 최소의 자리수를 일컫는다. 만일, 어떤 정수의 자리수가 정밀도 보다 작다면 앞에 0 이 붙어서 자리수를 맞추게 된다. 또한 자리수가 더 크다고 해서 정수를 잘라서 출력하지는 않는다. 만일 정밀도가 0 이라면, 소수점 뒤에 자리수를 출력하지 않는다.
    e,E, F 의 경우 : 여기서 정밀도는 소수점 이하 출력될 자리수를 의미한다.
    g, G 의 경우 : 출력될 유효 숫자의 수를 의미한다.
    s 의 경우 : 출력될 문자의 최대 개수를 의미한다. 원래는 널 문자를 만나기 전까지 모든 문자가 출력되었었다.
    c 의 경우 : 아무 효과 없다.
    만일 정밀도가 지정되지 않는다면 기본값으로 1 이 된다. 또한, 마침표(.) 을 찍었는데 아무런 숫자를 적지 않았다면 기본적으로 0 이 적혔다고 생각한다.
    .* 형식 문자열에서 정밀도를 나타내지는 않지만 뒤에 인자로 정밀도 값을 준다. 이 때 인자는 형식 태그가 적용되는 데이타 앞에 있어야 한다.  

       길이는 출력하는 데이터의 정확한 크기를 지정하는데 사용된다. 예를 들어서 %d 서식문자의 경우 막연하게 '정수형 데이터를 십진법으로 출력한다' 였지만 길이를 지정해주면 어떻나 크기로 데이터를 출력해야되는지 (int 냐 short 냐 등등) 을 지정할 수 있다. 

  • 길이
    설명
    h 인자를 short int 혹은 unsigned short int 로 생각한다. (오직 i, d, o, u , x, X 서식 문자에만 적용된다)
    l 정수 서식 문자(i,d,o,u,x, X) 에 사용되었을 경우 인자를 long int 나 unsigned long int 로 생각하며 c 나 s 에 사용되었을 경우 wide character 나 wide string 으로 생각한다.
    L 인자를 long double 로 생각한다. (오직 부동 소수점 서식 문자인 e,E,f,g, G 에만 적용된다)

  • /* 사용 예 */
    #include <stdio.h>
    int main()
    {
        double f = 3.141592;
        int i = 12345;
        char buffer[100];

        sprintf(buffer, "f : %.3f \n", f);
        printf("buf: %s \n", buffer);
        sprintf(buffer, "i : %.10d \n", i);
        printf("buf : %s \n", buffer);

        return 0;
    }

    출력 결과


    부수적인 인자

    형식 문자열에 따라 함수는 여러 인자들을 가지며, 각 인자는 형식 문자열의 각 형식 태그에 순차적으로 대응된다. 기본적으로 형식 문자열에 들어 있는 형식 태그의 수와 뒤따라 붙는 인자들의 수는 같아야 한다. (물론 .* 이나 * 과 같은 예외적인 상황은 제외한다)

       sprintf 함수의 활용 - 수를 문자열로 바꾸기
     

    sprintf 함수를 잘 이용하면 수를 손쉽게 문자열로 바꿀 수 있다. 바로 다음과 같이.

    #include <stdio.h>
    int main()
    {
        int i;
        char str[100];

        scanf("%d", &i);
        sprintf(str, "%d", i);

        printf("str : %s \n", str);

        return 0;
    }


    실행 결과


    i 의 값을 %d 의 형태로 str 에 문자열로 넣었으니 str 에는 i 의 값이 문자열의 형태로 변환된다.
    마찬가지 방법으로 i 의 값을 16 진수나 8 진수 형태로 (%x, %o) 넣을 수 도 있다.

       리턴값
     

    str 에 쓰기가 성공할 경우 쓰여진 총 문자의 개수가 반환된다. 이 때, 이 문자의 개수는 맨 마지막에 자동적으로 붙는 NULL 문자는 포함하지 않는다.
    실패할 경우 음수가 리턴된다.

       실행 예제
     

    /*

    sprintf 함수 예제
    이 예제는 http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
    에서 가져왔습니다.

    */
    #include <stdio.h>
    int main ()
    {
        char buffer [50];
        int n, a=5, b=3;
        n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
        printf ("[%s] is a %d char long string\n",buffer,n);
        return 0;
    }


    실행 결과



       연관된 함수
     

    • printf  :  표준 출력(stdout) 에 데이터를 형식에 맞추어 출력한다.
    • sscanf  :  문자열에서 데이터를 형식에 맞추어 읽는다.

     

    첫쨰날 2010-01-20

    Posted by ironmask84
    2010. 2. 9. 23:43 해외여행/일본 - 2010





    부산에 살지만서도, 저렴한 제주항공을 이용하기 위해
    KTX를 타고 김포공항까지 가서 비행기를 타게 되었다 ㅋㅋ
    그러나.. 이게 왠 날벼락.. 서울엔 비가 오고있었고.. 김포공항 주위에는 안개가 자욱했다..


    그리고 혹시나 했는데.. 아래 사진과 같은 상황이...내가 탈 비행기는 14:00 오사카행...


    캔슬되는 항공편들도 몇개 생기고 해서.. 그 동안 세워놨던 계획에 빵꾸가 나버리나 싶었지만..
    다행히도 제주공항에서 비행기가 출발을 했고, 김포공항에 도착하여 19시에 출발했다..
    항공사에서도 미안해하며 탑승하기전 롯데리아 새우버거를 나눠주더군..
    그리곤 아래사진과 같이 제주항공의 기내식은.. 삼각김밥과 감귤쥬스 ㅋㅋㅋㅋ



    고맙게도 내 친구의 일본인 친구가 간사이 공항에 마중나와 있었고 정말 고맙게도 이것저것 챙겨주었다..



    처음으로 타게된 일본 전철역 ㅎㅎㅎ
    아무튼 어떤 경로로 가게 된건지 기억은 안나지만 .... ㅡ_ㅡ..
    간사이 공항역에서 난바역으로 가기위한 시작..



    드디어 난바에 도착했지만...
    기환이의 일본친구와 저녁을 먹을 시간도 없이 ㅡ_ㅡ...
    야간버스 탑승장소를 찾기 위해 그냥 난바역 근처를 이렇게 활보하기만...
    아래 사진처럼 지상에도 역이랑 연결되어서 지붕이 덮여있는 상가 공간이 많았던 것 같다.





    늦게 도착해서, 오사카 구경을 거의 못하고 도쿄로 가는 야간 버스 탑승 위치를 찾기에 매우 바빴다.
    사실 그 날 비행기가 캔슬되면, 미리 예약해놓은 야간버스를 날려버리는 것이 가장 큰 걱정이었다. ㅋㅋ
    오사카-> 도쿄 행으로 거금 6100엔짜리.. 고급 야간버스로 했었다 ㅋ
    대에충 간식거리만 사놓고, 이러고 있었다...
    아래 사진은 야간 버스를 타기전 화장실에서 한 컷 ㅋㅋ


    이것이 일본 야간 버스 ㅋㅋ


    여행 첫날 부터 야간버스를 탈려니 이거 뭐 체력소모가 ㅋㅋㅋ
    아무튼 이렇게 첫날 일정은 마무리 되었다..
    아래는 버스 내부 사진 ㅋ