Friday, May 11, 2007
Perl 펄] unpack pack 함수, 문자열을 1글자씩 처리, 배열로 변환
펄은 바이트 단위가 아닌, 문자열 단위로 데이터 입출력이 이루어지기에, 문자열을 "한 글자씩" 처리하는 것이 좀 까다롭습니다.
unpack 함수로, 문자열을 배열로 변환하여 처리합니다. 배열을 다시 문자열로 합칠 때에는 pack 함수를 사용합니다.
"C*" 이런 옵션을 붙여야 하는데, 대문자 C 는 unsigned char (부호없는 1바이트 문자) 즉 바이트 단위로 처리하라는 뜻이고, 별표(*) 는 문자열의 끝까지 모두 처리하라는 뜻입니다. "C3" 이라고 하면 3글자까지만 처리합니다.
파일명: example.pl
위의 소스로는 한글 문자열을 처리할 수 없습니다. 다음 소스에서는 유니코드로 변환하여 한글 문자열을 처리합니다: ▶▶ Perl 펄] 한글 문자열 1글자씩 처리, 유니코드(UTF-8) 배열로 변환; Unicode String to Array
▶▶ Perl 펄] 바이트 배열을, 이진 문자열로 변환 방법; Bytes to Binary Array, Bin-String
unpack 함수로, 문자열을 배열로 변환하여 처리합니다. 배열을 다시 문자열로 합칠 때에는 pack 함수를 사용합니다.
"C*" 이런 옵션을 붙여야 하는데, 대문자 C 는 unsigned char (부호없는 1바이트 문자) 즉 바이트 단위로 처리하라는 뜻이고, 별표(*) 는 문자열의 끝까지 모두 처리하라는 뜻입니다. "C3" 이라고 하면 3글자까지만 처리합니다.
문자열을 배열로 변환 처리 예제
파일명: example.pl
#!/usr/bin/perl
use strict; use warnings;
####################################################
## 문자열을 배열로 변환
#
my $s = "MP3 Player"; # 문자열 정의
# 문자열을 1글자씩 분해하여 배열로 만들기
my @array = unpack "C*", $s;
# 배열 내용 출력 (1글자씩 나옴)
print chr($_), "-" foreach (@array);
# 화면 출력 결과: M-P-3- -P-l-a-y-e-r-
print "\n\n"; # 편의상 줄바꿈
####################################################
## 배열을 문자열로 변환
#
my $result = pack "C*", @array;
# 문자열 출력
print $result, "\n";
# 화면 출력 결과: MP3 Player
# 다시 복원되었습니다.
use strict; use warnings;
####################################################
## 문자열을 배열로 변환
#
my $s = "MP3 Player"; # 문자열 정의
# 문자열을 1글자씩 분해하여 배열로 만들기
my @array = unpack "C*", $s;
# 배열 내용 출력 (1글자씩 나옴)
print chr($_), "-" foreach (@array);
# 화면 출력 결과: M-P-3- -P-l-a-y-e-r-
print "\n\n"; # 편의상 줄바꿈
####################################################
## 배열을 문자열로 변환
#
my $result = pack "C*", @array;
# 문자열 출력
print $result, "\n";
# 화면 출력 결과: MP3 Player
# 다시 복원되었습니다.
위의 소스로는 한글 문자열을 처리할 수 없습니다. 다음 소스에서는 유니코드로 변환하여 한글 문자열을 처리합니다: ▶▶ Perl 펄] 한글 문자열 1글자씩 처리, 유니코드(UTF-8) 배열로 변환; Unicode String to Array
▶▶ Perl 펄] 바이트 배열을, 이진 문자열로 변환 방법; Bytes to Binary Array, Bin-String
tag: perl
Perl | 펄
<< Home