본문 바로가기
#include <stdio.h>

int cntKor(char pStr[])
{
    int i, k, cnt = 0;

    for (i = 0; pStr[i] != '\0'; i++)
        if (pStr[i] & 0x80)
            cnt++;

    return cnt/3;
}

int main(void)
{
    char *s[] = {"A BCD  EFG    GH     ",     // space 9 // eng 8
                 "가 나  다   라    마     "};  // space 15 // kor 5 x 3byte

    printf("%d\n", cntKor(s[0]));
    printf("%d\n", cntKor(s[1]));
    printf("%d\n", cntKor("  가나   DEF"));   // space 5 // eng 3 // kor 2 x 3byte

    return 0;
}

 

1Byte

  • 8bit, (0x00, 0) ~ (0xFF, 255)

영문자

  • ASCii, 7bit
    A (0x41, 65) ~ Z (0x5A, 90)
    a (0x61, 97) ~ z (0x7A, 122)

한국어

  • 3Byte
    2Byte Unicode + 1Byte '\0' 

영문자 VS 한국어 

  • 0x20(32) ~ 0x7E(126),  00100000 ~ 01111111
  • 0xAC00 ~ 0xD7A3, 1010110000000000 ~ 1101011110100011

& 0x80 연산

  • 첫번째 비트가 1 로 시작하면 한글, 0으로 시작하면 Ascii 값
  • 0x80, 128, 1000 0000
0100 0001     'A' = 0x41 
1000 0000     & 연산 
------------------------- 
0000 0000 = (0) 

 

BasicLike

어? 나 프로그래밍 좋아하네?