빌더 6.0 의 String은 char 형인가 보네요.
char형은 EUC-KR 코드 를 사용 한다네요.
http://ko.wikipedia.org/wiki/KS_X_1001_%ED%95%9C%EA%B8%80_%EB%B6%80%EB%B6%84_%ED%91%9C
char *c = Edit1->Text.SubString(1,1).c_str();
unsigned short w=(unsigned char)c[0];
w = w << 8;
w = w + (unsigned char)c[1];
if ( w== 0xA4A1 || 0xB0A0 <= w && w < 0xB1EE) {
ShowMessage("ㄱ");
}
0xA4A1 이 'ㄱ'에 대한 값이고
0xB0A0 ~ 0xB1ED 가 'ㄱ'으로 시작하는 모든 음절에 대한 값입니다.
빌더 6.0이 없어서 테스트는 못해봤지만
아마 될겁니다.
하안인 님이 쓰신 글 :
: 제가 빌더6.0을 사용하고 있는데요.
: w_str() 은 없는데요.
: c_str() 로 바꿔서 해 보았는데 해당 루틴으로 적용이 안되서...
:
: unsigned sort w;
: String s1,s3;
: s3 = "";
: s1 = ss.SubString(1,n-1);
: w = *s1.SubString(1,1).c_str();
: if( w == 0x3131 || (0xAC00 <= w && w < 0xAC00+0x24c))
: {
: c++;
: //port[chan].pos++;
: s3 += s1;
: }
: else
: {
: }
:
:
: 빌더초보 님이 쓰신 글 :
: : 한글 자모 코드 표 링크
: :
http://www.unicode.org/charts/PDF/U1100.pdf
: :
: : 한글 음절 코드 표 링크
: :
http://www.unicode.org/charts/PDF/UAC00.pdf
: :
: :
unsigned short w = *Edit1->Text.SubString(1,1).w_str();
: :
: : if (w == 0x3131 || (0xAC00 <= w && w < 0xAC00+0x24C)) {
: : ShowMessage((wchar_t)0x3131);
: : }
: :
: : 링크 참조하셔서 위처럼 코드 범위로 구분하시면 됩니다.
: :
: : 근데 자모코드 표에는 ㄱ이 1100 이라고 나와 있는데, 실제로는 3131 이더군요.
: : 컴파일러의 유니코드 버전차이(?) 인것같은데 자세히는 모르겠네요.
: :
: : 폼에 TEdit 를 두개 올리시고 Edit1Change에 아래와 같이 쓰고 테스트 해보세요.
: :
void __fastcall TForm1::Edit1Change(TObject *Sender)
: : {
: : wchar_t *w=Edit1->Text.w_str();
: : Edit2->Text="";
: : for (int i = 0; i < Edit1->Text.Length(); i++) {
: : Edit2->Text=Edit2->Text+", "+IntToHex((unsigned short)w[i],4);
: : }
: : }
: :
: : 24C의 의미는... 전체를 다 확인해 본것은 아닌데 하나의 자음에 할당되는 음절의 갯수는 24C 개 더군요.
: : 아마 조합할수 있는 모든 경우의 수가 24C 개 인가 봅니다. 아닐수도 있고요 ㅎㅎ;
: :
: : 그럼..
: :
: :
: :
: :
: :
: :
: :
: :
: : 하안인 님이 쓰신 글 :
: : :
: : : 기린, 미역, 기사, 등등
: : :
: : : 의 문자열이 있을 경우 ㄱ 으로 시작되는 문자열을 찾으려면 어떻게 해야 하나요.
: : :
: : : 한문자이면 문자열 검색으로 하면 되는데 ....