컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post [이뮬/당나귀] 다운로드받은 파일이 저장되는 장소 변경 - eMule eDonkey2000...울트라에디트] 숨은 기호, 줄바꿈문자(개행문자) 보기 - 울트라에디터, UltraEdit ...울트라에디트] 핫키 지정하기 / Hotkey 사용자 정의, UltraEdit Key Map...구굴어스/굴굴어스/그글어스/구글어쓰 다운로드 - Gooogle Earth문제해결] 윈도우 업데이트가 되지 않고 에러가 납니다 - Windows Update Err...윈도우 서비스란? 서비스 변경/중지시키는 법 - Windows Service엑셀] 조건에 따라 셀 배경색 바꾸기, 적자를 빨간색으로 나타내기 - Excel Cell ...[정규식] C++에서 정규표현식 구현 라이브러리 - Regex++iso 화일 / .ISO 파일 / CD DVD 이미지 파일이란?구글 블로그(blogger.com)에, 그림 올리는 방법, 사진 업로드(Upload)하기

[펄/Perl] 이진파일 열기/저장하기 - 바이너리 파일/Binary File Open Save

Wednesday, September 06, 2006

펄은 텍스트 파일을 다루는 용도로 개발되었기에, 이진파일(Binary File)에는 취약하고 속도도 느립니다. 이진파일을 다루는 데는 C/C++가 최고입니다.

그렇지만 펄에도 이진파일을 다루는 기능은 다 갖추어져 있습니다.

open 함수 바로 뒤에 binmode 함수를 사용하면, 지정해준 파일 핸들에 한해서, 모든 입출력 함수들이 이진파일 모드로 작동합니다.


이진파일 속의 바이트들을 읽어서 16진수로 출력하는 예제


#!/usr/bin/perl
use strict; use warnings;

  # 읽기용 파일을, 이진 모드로 열기
  open FH, "<", "in.jpg" or die "$!\n";
  binmode FH;

  while (read FH, $_, 1) {
     printf("%02X ", ord($_));
  }

  close FH;

하드의 "현재 디렉토리"에 in.jpg 라는 사진 파일 즉 이진파일이 있어야 실행되는 예제입니다. jpg 파일을 in.jpg 로 이름을 바꾸고, 이 예제를 실행하면 됩니다.



위의 예제의 실행 결과


예를 들어 이런 식으로, 이진 파일의 각 바이트가 16진수로 변환되어 출력됩니다.
FF D8 FF E0 00 10 4A 46 49 46 00 01 02 00 00 64 00 64 00 00 FF EC 00
11 44 75 63 6B 79 00 01 00 04 00 00 00 3C 00 00 FF E2 0C 58 49 43 43
5F 50 52 4F 46 49 4C 45 00 01 01 00 00 0C 48 4C 69 6E 6F 02 10 00 00
6D 6E 74 72 52 47 42 20 58 59 5A 20 07 CE 00 02 00 09 00 06 00 31 00
00 61 63 73 70 4D 53 46 54 00 00 00 00 49 45 43 20 73 52 47 42 00 00
00 00 00 00 00 00 00 00 00 00 00 00 F6 D6 00 01 00 00 00 00 D3 2D 48
50 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 11 63 70 72 74 00 00 01 50 00 00 00 33 64 65 73 63 00 00
01 84 00 00 00 6C 77 74 70 74 00 00 01 F0 00 00 00 14 62 6B 70 74 00
00 02 04 00 00 00 14 72 58 59 5A 00 00 02 18 00 00 00 14 67 58 59 5A
00 00 02 2C 00 00 00 14 62 58 59 5A 00 00 02 40 00 00 00 14 64 6D 6E
64 00 00 02 54 00 00 00 70 64 6D 64 64 00 00 02 C4 00 00 00 88 76 75
65 64 00 00 03 4C 00 00 00 86 76 69 65 77 00 00 03 D4 00 00 00 24 6C
75 6D 69 00 00 03 F8 00 00 00 14 6D 65 61 73 00 00 04 0C 00 00 00 24
74 65 63 68 00 00 04 30 00 00 00 0C 72 54 52 43 00 00 04 3C 00 00 08
0C 67 54 52 43 00 00 04 3C 00 00 08 0C 62 54 52 43 00 00 04 3C 00 00
08 0C 74 65 78 74 00 00 00 00 43 6F 70 79 72 69 67 68 74 20 28 63 29
20 31 39 39 38 20 48 65 77 6C 65 74 74 2D 50 61 63 6B 61 72 64 20 43
6F 6D 70 61 6E 79 00 00 64 65 73 63 00 00 00 00 00 00 00 12 73 52 47
42 20 49 45 43 36 31 39 36 36 2D 32 2E 31 00 00 00 00 00 00 00 00 00
00 00 12 73 52 47 42 20 49 45 43 36 31 39 36 36 2D 32 2E 31 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 58 59 5A 20 00 00 00 00 00 00 F3 51 00 01 00 00 00 01 16 CC 58 59
5A 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 58 59 5A 20 00
00 00 00 00 00 6F A2 00 00 38 F5 00 00 03 90 58 59 5A 20 00 00 00 00
00 00 62 99 00 00 B7 85 00 00 18 DA 58 59 5A 20 00 00 00 00 00 00 24
A0 00 00 0F 84 00 00 B6 CF 64 65 73 63 00 00 00 00 00 00 00 16 49 45
43 20 68 74 74 70 3A 2F 2F 77 77 77 2E 69 65 63 2E 63 68 00 00 00 00
...이하 생략...


jpg 파일은 FF D8... 이라는 바이트들로 시작됩니다. FF D8 이라는 바이트들이 결과에서 정확히 보이고 있습니다.



binmode 함수의 사용법


이런 식으로 사용합니다:
#!/usr/bin/perl
use strict; use warnings;

  ### 이것은 개념도일 뿐, 예제가 아니기에 실행되지는 않습니다 ###


  # 읽기용 파일을, 이진 모드로 열기
  open IN, "<", "in.jpg" or die "$!\n";
  binmode IN;

  # 여기서 본격적인 작업...



  # 쓰기용 파일을, 이진 모드로 열기
  open OUT, ">", "out.jpg" or die "$!\n";
  binmode OUT;

  # 여기서 본격적인 작업...




  # 작업이 다 끝났으면, 파일 핸들 닫기
  close IN;
  close OUT;



☞ Perl

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top