문자열 한글 카운팅
#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)
|