달력

022012  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  •  
  •  
  •  
출처
http://blog.naver.com/mysticzizone?Redirect=Log&logNo=140018236999



유니코드에서 한글은 십진수로 44032부터 55203까지입니다.
이 유니코드 한글의 패턴을 분석해보면,

1. 초성은 19자로
ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ
의 순서이고,

2. 중성은 21자로
ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ
의 순서,

3. 종성은 28자로
(없음), ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ,
ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ
의 순서입니다.

따라서 19*21*28 = 11172 = 55203-44032+1 자의 한글이 구성됩니다.

이들 한글 초/중/종성으로 코드를 구성할 때,
초성, 중성, 종성의 순서로 코드를 구성합니다.
즉, 코드 44032는 '가' 이고, 코드 44033은 '각', 코드 44034는 '?A', ...
'가'에 종성 붙이는 것이 끝나면 '개', '객', ...
이런 식입니다.

따라서, 어떤 글자의 코드에서 44032를 빼고, 21*28로 나누면,
0 ~ 18의 숫자를 얻게 되고, 이는 위 초성의 순서와 같습니다.
마찬가지로, 44032를 빼고, 21*28로 나눈 나머지를 다시 28로 나눈 몫은
0 ~ 20이고, 이는 위 중성의 순서와 같습니다.
마지막으로, 44032를 빼고, 21*28로 나눈 나머지를 다시 28로 나눈 나머지는
0 ~ 27이고, 이는 위 종성의 순서와 같습니다.

따라서 char ch 의 종성을 알고자 한다면,
int third = ( ( ch - 44032 ) % ( 21 * 28 ) ) % 28;
로 얻은 int third 값을 이용하면 됩니다.

참고로 초성은
int first = ( ch - 44032 ) / ( 21 * 28 );
중성은
int second = ( ch - 44032 ) % ( 21 * 28 ) / 28;
입니다.

'프로그래밍' 카테고리의 다른 글

Impression 백업  (0) 2006/07/30
한글 오토마타  (2) 2006/07/29
유니코드 한글 조합법  (0) 2006/06/06
기본에 충실하자.  (0) 2006/05/15
키보드 샀다.  (1) 2006/04/12
Doxygen  (0) 2006/02/21
Posted by 당근세푸대