Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

C Quiz

Computer/Programming/C/C++ 2009/06/17 16:26 by Shinnara

머리가 아파 잠시 웹서핑 도중 발견한 재밌는 문제.
출처:  C Quiz

동아리를 떠들썩하게 만들었던(?) 퀴즈 !

int i, n=20;
for(i =0 ; i < n ; i--)
  printf("-");

위의 코드에서 딱 한 글자만 고쳐서 -가 20번 출력되게 해봅시다

위 홈페이지에서도 두가지 답을 제시하고 있는데요, 제가 생각한 답은 아래와 같습니다.

int i, n=20;
for(i =0 ; -i < n ; i--)
  printf("-");


한 글자를 추가한 것이라서 답이 안될려나요? 하여간 위와 같이 해도 20번의 -가 출력됩니다 ^^







이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, Quiz
0 Trackback, 1 Comment

TRACKBACK :: http://naratalk.com/trackback/314 관련글 쓰기

댓글을 달아 주세요

  1. test  댓글주소  수정/삭제  댓글쓰기

    i-- => n--

    2009/06/18 22:37


 요즘 계속해서 C 코드 파싱 문제를 다루고 있는데요, 그다지 큰 진척이 없다가 정통(?) 방식을 따르기로 마음먹고 Lex와 Yacc에 대한 공부를 해보았습니다. 뭐, 아직까지 제대로 알고 있지는 못하구요, 대강 어떻게 돌아가는 지, 문제가 생기면 어디쯤을 고쳐야 하는지에 대한 대략적인 감만 얻었다고나 할까요? 그래도 작업은 꽤 많이 진척되어서 C 코드에서 원하는 정보를 99% 얻어내고 있답니다. 이와 관련된 내용은 시간을 내어 정리하도록 하고, 오늘은 그 작업에 무지 무지 큰 도움이 된 정보를 소개하고자 합니다.

Lex 와 Yacc을 이용하기 위해서는 Lexical Specification 과 Grammar가 필요한 데요, 다음 링크에서 얻을 수 있습니다.

Lexical Specification
Yacc Grammar

꽤나 잘 정리가 되어 있습니다. 물론 곧바로 쓰기에는 약간 무리가 있는 부분도 있지만, 제가 원하던 작업에는 쉽게 적용이 가능했습니다.

C의 문법을 보면서 ANSI C의 표준에 대해 궁금해서 찾아봤는데, 좋은 자료가 있더군요.

Draft of the C99 standard (PDF)




이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/280 관련글 쓰기

댓글을 달아 주세요


 전에 C 코드를 분석해서 그 안에 있는 내용을 추출해내려 한다는 이야기와 함께 몇가지 시도를 했다는 것을 올린 적이 있습니다. Perl을 이용해서 함수 호출 및 상수 추출 등을 구현해 보았는데요, 어찌보면 정식 방법은 아니죠. 보다 정확하게 하려면 C의 문법을 이용해서 처리를 해야 하는데, 생각보다 쉽지는 않네요. 물론 제대로된 노력을 해보지 않은 탓도 있겠지만요.

 한동안은 C 코드 분석과 관련된 내용을 생각치 않고 있다가, 어제부터 다시 시작하게 되었습니다. 이번에는 좀더 개선된 내용으로 만들어 볼까 하는데, 이번에도 잘 될지는 의문입니다.

 이번에 시작하면서 가장 먼저 하는 것은 코드 상에 존재하는 주석을 제거하는 일입니다. 여타의 컴파일러가 하듯이 말이죠. Perl의 Parse::RecDescent 모듈을 보면 주석을 제거 하는 부분이 들어가 있음을 알 수 있습니다. C 언어의 문법을 활용하는 방법입니다.

 하지만 여기서는 좀더 단순히 주석만을 제거한 새로운 C 코드를 얻는 것을 일차적인 목표로 합니다. 주석이 제거 되고 나면 그 다음에 문법을 활용해서 파싱을 하든, 예전처럼 꽁수를 부려 원하는 정보를 얻어 내든 할 수 있을 테니까요.

 주석을 제거하기 위해 처음에는 라인 단위로 읽어서 처리하려고 했습니다. 그러다보니 예외 케이스가 많이 있더군요. 그래서 적용한 방법은 한문자씩 읽어서 주석의 시작과 끝을 판단, 주석이라고 판단되면 출력하지 않는 것입니다. C 코드를 작성할 때 단순히 ASCII 코드만 있으면 좀더 처리가 편리하겠지만, 요즘은 UniCode를 지원해야겠죠? 그래서 아래와 같은 코드를 삽입하게 됩니다.

    private String getStringChar(int unicode)
    {
        char[] codeUnits = new char[2];
        int count = Character.toChars(unicode, codeUnits, 0);
        return new String(codeUnits, 0, count);
    }

 위의 코드는 Supplementary Characters in the Java Platform에서 참고하였습니다. 코드 내용은 unicode 코드의 값을 String으로 변환해주는 것입니다.

 주석을 판단하여 제거하는 부분은 다음과 같습니다.

    public void removeComments(File srcFile, File tgtFile) throws Exception
    {
        BufferedReader br = new BufferedReader(new FileReader(srcFile));
        BufferedWriter bw = new BufferedWriter(new FileWriter(tgtFile));
       
        StringBuffer buffer = new StringBuffer();
        int unicodeChar;
        int prevChar = -1;
       
        boolean comments = false;
       
        while( (unicodeChar = br.read()) >= 0 )
        {           
            String str = getStringChar(unicodeChar);
           
            if( !comments && unicodeChar == '/')
            {
                int nextChar = br.read();
                if( nextChar == '*' )
                {
                    comments = true;
                    bw.write(buffer.toString());
                    buffer = new StringBuffer();                   
                } else                   
                    str += getStringChar(nextChar);                   
            }
                       
            if( !comments )                               
                buffer.append(str);           
           
            if( comments && unicodeChar == '/' && prevChar == '*')
                comments = false;       
           
            prevChar = unicodeChar;
           
        }
       
        if( buffer.length() > 0 ) bw.write(buffer.toString());
       
        bw.close();
        br.close();       
    }

 원본 파일과 주석이 제거된 내용을 저장할 파일을 받아서 처리를 하게 됩니다. C 에서는 /* ~ */ 형태의 주석만을 사용하기 때문에 이러한 패턴만을 찾아서 제거합니다.

아직 개선의 여지가 있을 수 있는 코드이기는 하지만, 처음에 생각했던 것 보다는 코드가 꽤나 단순해 보이네요.

이제 이 결과물을 이용해서 원하는 정보를 뽑아내는 과정을 고심해봐야겠습니다.








이올린에 북마크하기(0) 이올린에 추천하기(0)
1 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/277 관련글 쓰기

  1. Subject: 주석 제거 프로그램(CommentRemover) 배포

    Tracked from Adobe AIR Devpia.  삭제

    Adobe AIR Application Installer Page Download Application now. This application requires Adobe&#174; AIR&#8482; to be installed for Mac OS or Windows. ↑Install Now 버튼(배지)을 클릭하세요. 프로그래밍 작업을 완료한 후 주석을 제거해 본 적 있으신가요? 타 업체에 소스 코드를 넘길 때..또는 CSS, 자바스크립트를 웹에 올..

    2009/08/29 02:36

댓글을 달아 주세요


C / C++ 관련 자료에 대한 링크를 모아볼려고 합니다.

GDB를 이용한 디버깅
GDB 잘 쓰기




TAG c, c++, GDB
0 Trackback, 1 Comment

TRACKBACK :: http://naratalk.com/trackback/236 관련글 쓰기

댓글을 달아 주세요

  1. BlogIcon 아리새의펜촉  댓글주소  수정/삭제  댓글쓰기

    고맙습니다. CodeBlocks에서 GDB를 사용하는데 항상 막막했거든요.
    덕분에 이제 GDB와 친하게 될 것 같네요.

    2009/02/20 23:13


어제부터 C 관련 공부를 다시 하고 있습니다. Unix 환경에서 개발하다보니 make 는 필수입니다. Java 를 접하신 분이라면 Ant 와 비슷한 내용이라고 보시면 됩니다.

근데 이놈의 make 가 제대로 동작하지 않는 것입니다. port 설치 같은 것을 할 때는 잘만 되던것이, 제가 Makefile 을 작성하기만 하면 Need an operator 라고 하면서 에러가 나는 것입니다.

구글 검색을 통해 봤더니 gnu make를  쓰라는 말이 많아서 gmake 로 해도 마찬가지로 missingn separator 라는 에러메시지만을 표시할 뿐이었습니다.

Make 파일을 만들 때 가장 조심해야 하는 것이 명령 앞에 tab 키를 눌러주는 것입니다. 저 역시 vi 에서 편집을 할 때 tab 키를 이용해서 명령을 적었지요. 하도 안되어서 아주 간단한 것만 테스트를 해보았습니다.

[Makefile]
all :
    echo "hello"

이렇게 간단한 Makefile 마저 에러가 나버리니... ^^ 한참을 고민하다가 혹시나  vi 가 tab 을 공백으로 변환하는건 아닌가 하여 에디터를 바꾸어보았습니다. 대부분의 개발자들처럼 저도 auto indent 며 ts 등을 셋팅해놓았었지요.

그래서 바꾸어본 에디터가 pico.

동일한 내용을 입력하고나서 make 를 해봅니다.

[shinnara ~/work/freebsd-make]$ make
echo "hello"
hello


정말 오 마이 갓!입니다. 이것때문에 그렇게 골머리를 앓다니요..T.T

Makefile 을 작성했는데 제대로 안되시는 분들은 먼저 에디터부터 확인해보세요 ^^



이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/235 관련글 쓰기

댓글을 달아 주세요

mystery.c

Computer/Programming/C/C++ 2007/11/21 15:23 by Shinnara

UNIX-C 튜토리얼을 보다가 보게된 프로그램입니다.


#include <stdio.h>

main(t,_,a)
char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}


참으로 난해하게 보이는 코드입니다. 저렇게 코드를 짠다면 아마 무지 혼낼것 같습니다~ 하지만 조금만 들여다보면 어떻게 동작하는 지를 알수 있는 코드이기도 하지요.

다음은 실행 결과 입니다.

On the first day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eighth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.


이해는 되지만, 그래도 신기하긴합니다 ^^




이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, mystery.c, unixc
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/232 관련글 쓰기

댓글을 달아 주세요


C를 다시 정복하고 싶은 제 마음을 적은 바 있는데요, 그래서 바로 시작을 했습니다. 환경은 FreeBSD 6.2, gcc 3.4.6 환경입니다.

앞선 포스팅에서 좋은 자료로 소개한 것 중에 Unix C 에 대한 자료로 일단 시작을 해보았는데, 거기에 있는 내용 중에 도움이 될 만한 자료들을 추려보려고 합니다. 특히 연습 문제를 위주로 하여 진행 하고자 합니다.

첫번째 내용이 C로 프로그래밍을 하여 컴파일하고 실행하는 것에 대한 내용입니다. 자세한 내용은 원본 문서를 확인해주시면 되구요.

연습문제를 풀어보도록 하겠습니다.

Exercise 12172

The following program uses the math library. Enter compile and run it correctly.

#include <math.h>

main()

{ int i;

printf("\t Number \t\t Square Root of Number\n\n");

for (i=0; i<=360; ++i)
printf("\t %d \t\t\t %d \n",i, sqrt((double) i));
}

위의 프로그램을 컴파일하고 제대로 실행하라는 문제군요. 라이브러리를 어떻게 쓰는지에 대한 문제입니다.

위의 내용대로 코드를 입력하고 컴파일을 해봅니다.

[shinnara ~/work/c/unixc]$ gcc exer12172.c
/var/tmp//ccEk6OYt.o(.text+0x4a): In function `main':
: undefined reference to `sqrt'
[shinnara ~/work/c/unixc]$

역시나 sqrt 가 정의되어 있지 않다고 나옵니다. -l 옵션을 붙여줘야 합니다.

[shinnara ~/work/c/unixc]$ gcc exer12172.c -lm
[shinnara ~/work/c/unixc]$

gcc 옵션과 관련된 자세한 내용은 Gcc 와 Make 강좌를 참조하시기 바랍니다.

컴파일이 제대로 되었으니, 이제 실행을 해봐야 할텐데요. a.out 이 디폴트로 생겼으니 실행을 해봅니다.

[shinnara ~/work/c/unixc]$ ./a.out
Number Square Root Of Number

0 0.00
1 1.00
2 1.41
...
353 18.79
354 18.81
355 18.84
356 18.87
357 18.89
358 18.92
359 18.95
360 18.97
[shinnara ~/work/c/unixc]$

그런데 실행된 모습이 다르다구요? 네, 맞습니다. 위의 프로그램을 조금 변경했습니다. 아래는 제 소스입니다.


[shinnara ~/work/c/unixc]$ cat exer12172.c
#include <math.h>

main()
{
int i;

printf("\t Number \t\t Square Root Of Number\n\n");

for(i=0;i<=360;i++)
printf("\t %d \t\t %.2f\n",i,sqrt((double) i ));
}
[shinnara ~/work/c/unixc]$


이제, 다들 제대로 동작하시죠?









이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, compile, unixc
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/231 관련글 쓰기

댓글을 달아 주세요

C 다시 배우기

Computer/Programming/C/C++ 2007/11/21 14:11 by Shinnara

어려서부터 컴퓨터를 좋아했고, 프로그램도 많이 짜보았습니다. 프로그램을 짜기 위해 배우고, 또 써본 프로그래밍 언어의 종류가 꽤나 많은데, 지금와서 특별히 잘하는 게 별로 없는 것 같네요.

 제일 처음 접한 언어는 역시나 BASIC . 초등학교 2학년때부터 책을 통해서 거의 독학을 했지요. 그리고 초등학교 5학년때인가? Fortran 을 접했습니다. 지금 생각해보면 굉장히 까다로운 문법과 불편한 작업 환경이었지만, 그래도 무척 재밌었던 기억이 있습니다.
 
그리고는 중학교와 고등학교 시절 C를 접하게 되었고, 고등학교를 졸업할 무렵 Java 를 알게 되었습니다. 그 이후로 계속해서 Java 와 인연을 맺고 있구요. 대학시절에는 Scheme , Assembly, PHP, Visual C++, Visual Basic, Delphi 등 도 조금씩 써봤고, 최근에 들어서 Ruby 를 조금씩 익히고 있는 중입니다. 근데 Ruby 는 이상하게 저랑 친하지 않은 듯 합니다 ^^ 절실하지 않아서인지도 모르겠구요. 책 사놓은지가 벌써 몇달이 되어가는데 제대로 인사를 못하고 있네요. 그외에는 Groovy 도 써봤는데, 이걸 새로운 언어라고 해야할 지는 모르겠습니다 ^^

하여튼, 지금껏 꽤 많은 언어에 대해 공부해보고, 프로그램도 만들어왔는데, 최근 들어 느낀 것은 특히나 기본이 중요하다는 것입니다. 주로 Java를 이용해서 작업을 해왔고, 그쪽에 대해 Speciality 를 가지고 있었지만, C 에 대해 자신감이 좀 부족하다는 생각을 쭈욱 해왔습니다. 그러다가 며칠전 마이크로소프트의 NTO(? 정확한 직함이 맞는지는 모르겠네요. 전에 학교에 강연오셨을 때 들은 직함이라...) 이신 김명호 박사님의 프리젠테이션 자료를 보게 되었습니다. 거기에 있던 말이

"기초에 충실하라."

기본기를 강조하며, 남들이 잘 알고 있는것은 자신도 잘 알아야 한다는 이야기였습니다.  오늘 ZDNET 에 이에 대한 내용이 소개되기도 했습니다. 전산학과를 졸업하고 대학원에서 SE를 전공하면서, 전산학이며 프로그래밍에 대해서 기초는 충실하다고 생각합니다. 하지만 유독 C 에 대해서만은 자신이 없습니다. 제가 피해오기도 했지만, 또 쓸일이 없었기 때문이기도 하지요. 학부시절 프로그래밍 과제를 위해서, 프로젝트를 위해서 써본 것이 거의 전부입니다. 아, 대학원에 리눅스 관련 프로젝트를 할 때도 쓰기는 했네요..

그래서 이번 기회를 빌어 다시 한번 C를 정복해 볼까 합니다. 얼마전 Eclipse 에서 C/C++ 개발하기라는 주제로 개발환경 구축에 대한 글을 올렸었는데요, Eclipse 와 더불어 Unix 환경에서의 C 개발에 주력할 생각입니다.

정복에 있어 도움이 될 만한 자료를 찾아보고 있는데, 간단히 구글링을 통해서 얻은 자료 중에 괜찮은 것이 있어서 소개합니다.

Programming in C - Unix System calls and subroutines using C

C Tutorial

C Programming Tutorial

C야 기다리렴, 내가 간다 ^^


이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/230 관련글 쓰기

댓글을 달아 주세요


동료 직원이 어제 C에서 Java 라이브러리를 사용하는 법을 물어보길래, 찾아본 자료입니다.

그동안은 Java 에서 C를 사용하는 방법에 대해서만 고려하고 있었는데, 이런 방법도 있군요.

이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, java
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/139 관련글 쓰기

댓글을 달아 주세요

검색을 하다 유용한 내용이 있어서 옮겨봅니다.

원문 출처는 다음과 같습니다.

Java에서 C 모듈과의 소켓통신시 유의사항
http://cafe.naver.com/nwcomcokr/897 


잘 알다시피 자바는 JVM 플랫폼 위에서 연동되며 소켓통신등의 바이트 전송시 byte order 가 BIG_ENDIAN 이다. 하지만 C 처럼 실행파일이 만들어지는 경우는 해당 플랫폼에 따라서(좀 더 정확히는 CPU 종류에 따라서) byte order 가 달라진다.

intel, alpha 와 같은 경우에는 LITTLE_ENDIAN이며, sun sparc, mac os, 그리고 JVM 같은 경우에는 BIG_ENDIAN 이다.

c 의 경우 플랫폼별로 1 바이트를 이루는 크기가 다른데 이는 보통 /usr/include/machine 의 limits.h 와 같은 곳에 CHAR_BIT 이라는 이름으로 정의되어 있으며 byte order 는 /usr/include/macine 에 endian.h 와 같은 형태로 되어 있다.
다음은 intel 용 freebsd 의 endian.h 의 내용중 일부이다.


#define LITTLE_ENDIAN   1234    /* LSB first: i386, vax */
#define BIG_ENDIAN      4321    /* MSB first: 68000, ibm, net */
#define PDP_ENDIAN      3412    /* LSB first in word, MSW first in long */

#define BYTE_ORDER      LITTLE_ENDIAN


16bit OS 의 경우 한번에 2바이트씩 전송한다고 볼 수 있으므로(안그런 경우도 있지만) 만약 32bit 의 자료형을 전송하게 되면 이를 16bit 찍 잘라서 전송하게 되는데, 이때부터 byte order 의 문제가 발생한다.

전송해야 하는 4 byte 가 1 2 3 4 와 같이 있다고 할때, big_endian 은 12   34  이렇게 전송을 하고, little_endian 은 34   12  이렇게 나눠서 전송을 한다고 생각하면 쉬울 것이다.

따라서 전송하는 쪽의 내용과 받는쪽의 내용이 4 byte를 기준으로 상위 2byte 와 하위 2byte가 서로 상이하게 될 수가 있다.

이는 굳이 자바와 C 사이의 소켓통신뿐만이 아니라 이기종간 C와 C사이 통신에서는 언제든지 발생할 수 있는 상황이다.


해결책은?

별다른건 없다. 자바쪽에서는 보낼때 BIG_ENDIAN 으로 전송하고, 상대방쪽이 자바모듈이 아닐 경우는 플랫폼 정보를 얻은 다음 전송되어 온 바이트를 적절히 바꿔주면 된다.

C 의 경우는 endian.h 의 정보에 따라서 코딩을 해주면 된다.

if (  BYTE_ORDER == BIG_ENDIAN )
   // 1234 로 전송해
else if ( BYTE_ORDER == LITTLE_ENDIAN )
  // 4321 로 전송해

이런식으로 하면 소스수준의 이식성을 높일 수가 있을 뿐만 아니라 다른 시스템과의 소켓통신 등에도 유용하게 사용할 수 있다.
이런때 써먹기 위한 함수가 몇개 있는데(물론 c에서..) htonl, htons, ntohl, ntohs 등이 그것이다.
각각의 사용법은 알아서 발견하는 기쁨을 누려보도록 하자.

이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/113 관련글 쓰기

댓글을 달아 주세요

1 
다...... (251)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (6)
끄적임 (61)
즐거운 과학 나라 (7)
일본 (2)