동글동글 라이프
perl pack/unpack 본문
pack 함수는 값들로 구성된 리스트를 받아서
이진구조로 변환시킨 뒤에 변환시킨 문자열을 반환하는 함수이다.
템플릿의 종류를 알아보기에 앞서 하나의 예제를 먼저 실행 하여보자.
use strict;
my @list = (65..69);
my $out = pack "C*",@_;
print $out |
list에는 65부터 69까지의 숫자가 들어있다.
눈치를 채신분들은 알겠지만 저 숫자들은 아스키코드값의 10진수이고
A~E까지의 값을 차례대로 배열에 저장하였다.
이제 pack 함수를 살펴 보자.
C는 unsigned 문자를 나타내고 있으며
아스키 코드값을 문자로 변환하여 반환해준다 그래서 출력되는 값은
"ABCDE"가 되는 것이다.
이제 반대로 unpack함수를 보도록 하자.
이 함수는 pack과 반대기능을 하고 있다.
데이터 구조를 나타내는 문자열을
Template 형식에 따라 리스트를 만들고 그 리스트 값을 반환하는 역활을 한다.
use strict;
my $input = "ABCDE";
my @list = unpack "C*",$input;
print "@list";
출력해 본다면 65~ 69 까지의 값을 확인 할 수 있다.
그러면 하나의 예제를 만들어보자.
문자 와 10진수 2진수를 한번에 표현해 보자.
use strict;
my $input = "AaBb";
my @String = split '',$input;
my @binary = unpack "B8"x4,$input;
my @decimal = unpack "C*",$input;
printf "%5s | %-8s | %-8s \n","문자","10진수","2진수";
foreach(0..$#String){
print "="x 30 . "\n" if($_%2-1);
printf "%5s | %-8s | %-8s \n",$String[$_],$decimal[$_],$binary[$_];
}
Output:
문자 | 10진수 | 2진수
==============================
A | 65 | 01000001
a | 97 | 01100001
==============================
B | 66 | 01000010
b | 98 | 01100010
일부러 줄맞추려고 printf로 출력을 했건만... 줄이 맞지않는구나
codepad는 한글에 대한 배려가 없...
Template 의 종류와 쓰임에 대해서 좋은 pdf 파일을 하나 첨부를 한다. 유용하게 사용하시길..
(사실 구글링하면 나오는 자료... ㅡ_ㅡ;)
'개발자 이야기 > Perl' 카테고리의 다른 글
음악을 들어보자 #4 (0) | 2008.10.16 |
---|---|
음악을 들어보자 #3 (5) | 2008.10.12 |
음악을 들어보자! #2 (2) | 2008.10.09 |
음악을 들어보자! (1) | 2008.10.08 |
Chapter 4. Getting Started (3) | 2008.10.07 |