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

 
Wednesday, October 25, 2006

한글 확장 완성형 문자열 헥사 덤프, 16진수로 변환; Hangul Hex Dump


한글 확장완성형(euc-kr; cp949; ks_c_5601-1987) 문자열을 헥사 즉 16진수 값으로 변환하는 예제입니다. 완성형 코드를 분석할 때 필요한 것입니다.

완성형에서 "가"는 B0 A1 이라는 2바이트로 파일에 기록됩니다. 그러나 메모리에서는 바이트 순서가 바뀌어 A1 B0 이렇게 됩니다. 즉 파일에서는 빅 엔디언(BE)으로 0xB0A1 이렇게 순서대로 기록되고, 메모리에서는 리틀 엔디언(LE)으로 0xA1B0 이렇게 기록됩니다.


한글 완성형을 Hex(헥사)로 변환 예제 소스


소스 파일명: strdump_to_word.cpp
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#include <stdio.h>

unsigned short byteSwap(unsigned short n);
unsigned char getLeftByte(unsigned short n);
unsigned char getRightByte(unsigned short n);


// 한글 완성형 문자열 헥사 덤프.
// 영문 등의 1바이트 글자가 섞여 있으면 처리 못하는 한계 있음
void main(void) {
  char s[] = "가나다라똠방각하";
  size_t charCount = sizeof(s) / 2; // 한글 글자 개수 구하기
  unsigned short char16;

  printf("배열의 바이트 수: %d\n", sizeof(s));
  printf("배열의 한글 개수: %d\n", charCount);

  for (size_t i = 0; i < charCount; i++) {
    char16 = *((unsigned short *)s+i);
    printf("[%d] %c%c = (LE) 0x%04X, (BE) 0x%04X\n", i, getRightByte(char16), getLeftByte(char16), char16, byteSwap(char16));
  }

}




unsigned short byteSwap (unsigned short n) {
  return ((n >> 8) | (n << 8));
}


unsigned char getLeftByte(unsigned short n) {
  return (unsigned char) (n >> 8) ;
}


unsigned char getRightByte(unsigned short n) {
  return (unsigned char) (n & 0xFF);
}



실행 결과:
D:\Z>cl strdump_to_word.cpp && strdump_to_word.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

strdump_to_word.cpp
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:strdump_to_word.exe
strdump_to_word.obj
배열의 바이트 수: 17
배열의 한글 개수: 8
[0] 가 = (LE) 0xA1B0, (BE) 0xB0A1
[1] 나 = (LE) 0xAAB3, (BE) 0xB3AA
[2] 다 = (LE) 0xD9B4, (BE) 0xB4D9
[3] 라 = (LE) 0xF3B6, (BE) 0xB6F3
[4] 똠 = (LE) 0x638C, (BE) 0x8C63
[5] 방 = (LE) 0xE6B9, (BE) 0xB9E6
[6] 각 = (LE) 0xA2B0, (BE) 0xB0A2
[7] 하 = (LE) 0xCFC7, (BE) 0xC7CF

D:\Z>




▶▶ C언어] 영문 문자열 헥사(Hex) 덤프, 16진수로 변환 출력; String Dump

▶▶ C언어,비트연산] 바이트 순서 바꾸기 함수, short의 byte 위치를 Byte Swap

▶▶ C언어,비트연산] unsigned short의 좌측, 우측 바이트만 얻기 - Left Byte, Right Byte

▶▶ Perl, 한글 확장완성형 코드표 생성기 - Hangul Wansung Code Table Generator




tag: cpp
C언어 | C/C++ (Visual C++)

0 Comments:

Post a Comment

<< Home RSS 2.0 feed

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