[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 2. Windowsμμμ μ λμ½λ(UNICODE)
μ΄ ν¬μ€νΈλ, μ€μ±μ° μ μλμ 'λλ₯Ό μκ·Ήνλ μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°'μ λ°νμΌλ‘ μ μκ°μ μ¬κ΅¬μ±νμ¬ μ 리ν ν¬μ€νΈμ λλ€.
λͺ©μ°¨
- λ¬Έμμ μ μ’ λ₯μ νΉμ±
- WBCS κΈ°λ°μ νλ‘κ·Έλλ°
- 맀κ°λ³μ μ λ¬μΈμ μ λμ½λν
λ¬Έμμ μ μ’ λ₯μ νΉμ±
λ¬Έμμ μ΄λ? λ¬Έμμ μ§ν©μ΄λ€. λ¬Έμλ₯Ό μ΄λ»κ² νννλλ? νννλ λ°©λ²μ μμ΄ ν¬κ² 3κ°μ§λ‘ λλλ€.
- SBCS(Single Byte Character Set)
- λ¬Έμλ₯Ό νννλλ° 1λ°μ΄νΈ μ¬μ©νλ€
- μμ€ν€μ½λλ SBCSλ€
- MBCS(Multi Byte Character Set)
- νκΈμ 2λ°μ΄νΈ, μλ¬Έμ 1λ°μ΄νΈ μ¬μ©νλ ννλ€
- WBCS(Wide Byte Character Set)
- SBCSλ³΄λ€ 2λ°° λκ² νννλ€
- λ¬Έμλ₯Ό νννλλ° 2λ°μ΄νΈλ₯Ό μ¬μ©νλ€
- μ λμ½λλ WBCSλ€
μ°λ¦¬λ λνλ―Όκ΅μμ μ΄κ³ μκΈ° λλ¬Έμ, μννΈμ¨μ΄μμλ νκΈμ μ§μν΄μΌ νλ€.
νκΈμ μ§μνλ λ¬Έμμ μ μ΄ν΄λ³΄λ©΄ MBCSμ WBCSκ° μλλ°..
MBCSλ νκΈμ 2λ°μ΄νΈ, μλ¬Έμ 1λ°μ΄νΈλ₯Ό μ¬μ©νκΈ° λλ¬Έμ μΈλ» 보기μ ν¨μ¨μ μΌλ‘ λ³΄μΌ μ μλ€.
νμ§λ§ μμ¦ κ°μ μλμ μμ²λκ² κΈ΄ λ¬Έμ₯μ΄ μλ μ΄μ 1λ°μ΄νΈλ₯Ό μ€μλ€κ³ ν΄μ κ·Έλ κ² μΉμ°¬ν λ§ν μΌμ μλλ€.
κ·Έλμ λ±μ₯ν κ²μ΄ μ λμ½λλ€. μ λμ½λ(WBCS)λ νκΈμ΄λ μλ¬Έμ΄λ 2λ°μ΄νΈλ₯Ό μ¬μ©νκΈ° λλ¬Έμ MBCSλ³΄λ€ μμ μ μ΄λ€.
κ·Έλ¬λ©΄ MBCSκΈ°λ°μμ λ¬Έμλ₯Ό ννν λ μ΄λ€ λ¬Έμ μ μ΄ μλμ§ μλ μμ λ₯Ό ν΅ν΄ μ΄ν΄λ³΄μ.
[μμ 1]
int main(void)
{
char str[] = "ABCνκΈ";
int size = sizeof(str)
int len = strlen(str);
printf("λ°°μ΄μ ν¬κΈ°: %d\n", size);
printf("λ¬Έμμ΄ κΈΈμ΄: %d\n", len);
return 0;
}
[μ€ν κ²°κ³Ό]
λ°°μ΄μ ν¬κΈ°: 8
λ¬Έμμ΄μ κΈΈμ΄: 7
strλ ABCλ μλ¬Έμ΄κΈ° λλ¬Έμ 1byte * 3 = 3, νκΈμ νκΈμ΄κΈ° λλ¬Έμ 2byte * 2 = 4, nullλ¬ΈμκΉμ§ ν¬ν¨ν΄
λ°°μ΄μ ν¬κΈ°λ 3 + 4 + 1 = 8μ΄ λμ¨λ€.
κ·Έλ°λ°, λ¬Έμμ΄μ κΈΈμ΄λ "ABCνκΈ"μ λ€μ― κΈμκΈ° λλ¬Έμ 5κ° λμμΌ μ μμ΄μ§λ§ μ 7μ΄ λμμκΉ?
νκΈμ νλλΉ λ¬Έμμ΄ κΈΈμ΄ 2λΌκ³ μΈμν΄ λ¬Έμμ΄μ κΈΈμ΄κ° 3 + (2 * 2) = 7λ‘ λμ¨ κ²μ΄λ€.
[μμ 2]
int main(void)
{
char str[] = "νκΈμ
λλ€";
int i;
for(i = 0; i < 5; i++)
{
fputc(str[i], stdout);
}
fputs("\n", stdout);
for(i = 0; i < 10; i++)
{
fputc(str[i], stdout);
}
fputs("\n", stdout);
return 0;
}
[μ€ν κ²°κ³Ό]
νκΈ
νκΈμ
λλ€
μμ 1κ³Ό λμΌν μ΄μ λ‘ νκΈμ 2λ°μ΄νΈλ‘ μΈμνκΈ° λλ¬Έμ for 루νλ₯Ό λ릴 λ μμ κ°μ μ€ν κ²°κ³Όλ₯Ό 보μΈλ€.
WBCS κΈ°λ°μ νλ‘κ·Έλλ°
- WBCSλ₯Ό μν λ κ°μ§
- 첫째: charλ₯Ό λμ νλ wchar_t
- λμ§Έ: "ABC"λ₯Ό λμ νλ L"ABC"
- WBCS κΈ°λ° λ¬Έμμ΄ μ μΈ μ
- wchar_t str[] = L"ABC";
κ·Έλ λ€λ©΄ λΆμμ ν MBCS λμ WBCS κΈ°λ°μ νλ‘κ·Έλλ°μ νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉ? μμμμ λ κ°μ§λ₯Ό κΈ°μ΅νλ©΄ λλ€.
1. μ°λ¦¬κ° μΌλ°μ μΌλ‘ μ¬μ©νλ charμ μλ£ν λμ wchar_tλ₯Ό μ¬μ©νλ©΄ λλ€.
wchar_t μλ£ν κ°μ κ²½μ° λ―μ€κ² λκ»΄μ§ μ μλλ°, μ°λ¦¬κ° μ μν μλ£νμ΄ μλ ANSIμμ μ 곡νλ νμ€ μλ£νμ΄λ€.
μ°¨μ΄μ μ΄ μλ€λ©΄ charλ 1λ°μ΄νΈ, wchar_tλ 2λ°μ΄νΈλ₯Ό μ¬μ©νλ€.
2. "ABC"λ μ묡μ μΌλ‘ 'μμ€ν€μ½λ κΈ°λ°μΌλ‘ λ¬Έμμ΄μ μ μΈνκ² λ€.'λΌλ μλ―Έλ€.
λ°λ©΄μ L"ABC"λ 'μ λμ½λ κΈ°λ°μΌλ‘ λ¬Έμμ΄μ μ μΈνκ² λ€.'λΌλ μλ―Έλ€.
[μμ 3]
int main(void)
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = strlen(str);
printf("λ°°μ΄μ ν¬κΈ°: %d \n", size);
printf("λ¬Έμμ΄ κΈΈμ΄: %d \n", len);
return 0;
}
μμ μμ κ° μ μμ μΌλ‘ λμν κΉ? μ λ΅μ μλλ€. μ»΄νμΌμ‘°μ°¨ λμ§ μλλ€.
μ΄μ λ sizeofλ ν λΉλ λ©λͺ¨λ¦¬μ ν¬κΈ°λ₯Ό μ»λ ꡬ문μ΄κΈ° λλ¬Έμ μ λμ½λ/μμ€ν€μ½λκ° μκ΄μλ€.
νμ§λ§, strlen κ°μ κ²½μ° μΈμλ‘ λ°μ λ¬Έμμ΄μ κΈΈμ΄λ₯Ό λ°νν΄μ£Όλ ν¨μμΈλ° char*νμ μ μΈμλ₯Ό λ°λ ν¨μλ€.
κ·Έλ κΈ° λλ¬Έμ wchar_t* νμ μ μλ£λ₯Ό strlenμ μ λ¬νκΈ° λλ¬Έμ μ»΄νμΌ μ€λ₯κ° μκΈ΄ κ²μ΄λ€.
[ν 1] λ¬Έμμ΄ μ‘°μ ν¨μ
SBCS ν¨μ | WBCS κΈ°λ°μ λ¬Έμμ΄ μ‘°μ ν¨μ |
strlen | size_t wcslen(const wchar_t* string); |
strcpy | wchar_t* wcscpy(wchar_t* dest, const wchar_t* src); |
strncpy | wchar_t* wcsncpy(wchar_t* dest, const wchar_t* src, size_t cnt); |
strcat | wchar_t* wcscat(wchar_t* dest, const wchar_t* src); |
strncat | wchar_t* wcsncat(wchar_t* dest, const wchar_t* src, size_t cnt); |
strcmp | int wcscmp(const wchar_t* s1, const wchar_t* s2) |
strncmp | int wcsncmp(const wchar_t* s1, const wchar_t* s2, size_t cnt); |
[μμ 4] μμ 3μ μ λμ½λ λ²μ
int main(vodi)
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = wsclen(str);
printf("λ°°μ΄μ ν¬κΈ°: %d \n", size);
printf("λ¬Έμμ΄ κΈΈμ΄: %d \n"), len);
return 0;
}
[μ€νκ²°κ³Ό]
λ°°μ΄μ ν¬κΈ°: 8
λ¬Έμμ΄ κΈΈμ΄: 3
κ²°κ³Όλ μ μμ μΌλ‘ μΆλ ₯λμ§λ§ μμ§ μμ μ½λλ λ¬Έμ κ° μλ€.
μ λμ½λ κΈ°λ° νλ‘κ·Έλλ°μ νλ €λ©΄ μ²μλΆν° λκΉμ§ μ λμ½λλ₯Ό μ¬μ©ν΄μ ν΅μΌμ±μ μ μ§μμΌμ£Όλ κ²μ΄ μ’μλ°,
μμ μμ λ printfν¨μλ₯Ό μ¬μ©νκ³ μλλ° μΈμλ‘ μμ μμ€ν€μ½λ λ¬Έμμ΄μ μ λ¬νλ€.
[ν 2] λ¬Έμμ΄ μ μΆλ ₯ ν¨μ
SBCS ν¨μ | WBCS κΈ°λ°μ λ¬Έμμ΄ μ‘°μ ν¨μ |
printf | int wprintf(const wchar_t* format [, argument]...); |
scanf | int wscanf(const wchar_t* format [, argument]...); |
fgets | wchar_t fgetws(wchar_t* string, int n, FILE* stream); |
fputs | int fputws(const wchar_t* string, FILE* stream); |
λ¬Έμ ν΄κ²°μ μν΄ WBCS κΈ°λ°μ λ¬Έμμ΄ μ μΆλ ₯ ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€.
맀κ°λ³μ μ λ¬ μΈμ μ λμ½λν
[μμ 5] μμ 4μ μ λμ½λ λ²μ
int main(void)
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = wsclen(str);
wprintf(L"λ°°μ΄μ ν¬κΈ°: %d \n", size);
wprintf(L"λ¬Έμμ΄ κΈΈμ΄: %d \n"), len);
return 0;
}
[μ€νκ²°κ³Ό]
λ°°μ΄μ ν¬κΈ°: 8
λ¬Έμμ΄ κΈΈμ΄: 3
μλ²½νκ² μ λμ½λ κΈ°λ°μΌλ‘ νλ‘κ·Έλλ°ν κ² κ°μ§λ§ μ¬μ ν λ¬Έμ κ° λ¨μμλ€.
mainμ μ λ¬λλ 맀κ°λ³μ μΈμ κ°μ κ²½μ° μ¬νκΉμ§ SBCS κΈ°λ°μΌλ‘ μΈμκ° λμ΄μμμ§ μ λμ½λ κΈ°λ°μΌλ‘ λμ΄μ¨ κ²½μ°λ λλ¬Όλ€.
mainν¨μλ₯Ό λμ ν΄μ wmainν¨μλ₯Ό μ μΈνλ©΄ 맀κ°λ³μμ μΈμλ λͺ¨λ μ λμ½λ κΈ°λ°μ λ¬Έμμ΄λ‘ λ€μ΄μ¨λ€.
[μμ 5]
int wmain(int argc, wchar_t* argv[])
{
for(int i=1; i<argc; i++)
{
fputws(argv[i], stdout);
fputws(L"\n", stdout);
}
return 0;
}
[μ€ν κ²°κ³Ό]
AAA
BBB
CCC
'Development > System' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λκΈ
μ΄ κΈ κ³΅μ νκΈ°
-
ꡬλ
νκΈ°
ꡬλ νκΈ°
-
μΉ΄μΉ΄μ€ν‘
μΉ΄μΉ΄μ€ν‘
-
λΌμΈ
λΌμΈ
-
νΈμν°
νΈμν°
-
Facebook
Facebook
-
μΉ΄μΉ΄μ€μ€ν 리
μΉ΄μΉ΄μ€μ€ν 리
-
λ°΄λ
λ°΄λ
-
λ€μ΄λ² λΈλ‘κ·Έ
λ€μ΄λ² λΈλ‘κ·Έ
-
Pocket
Pocket
-
Evernote
Evernote
λ€λ₯Έ κΈ
-
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 3. WIN32 vs WIN64
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 3. WIN32 vs WIN64
2019.06.27 -
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 2. MBCSμ WBCSμ λμ μ§μ
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 2. MBCSμ WBCSμ λμ μ§μ
2019.06.27 -
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 1. νλ‘κ·Έλ¨μ μ€ν κ³Όμ /νλμ¨μ΄ ꡬμ±μ μ¬μ κ·Ό
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 1. νλ‘κ·Έλ¨μ μ€ν κ³Όμ /νλμ¨μ΄ ꡬμ±μ μ¬μ κ·Ό
2019.06.12 -
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 1. μμ€ν νλ‘κ·Έλλ°, μ»΄ν¨ν° νλμ¨μ΄ ꡬμ±, CPU
[μλμ°μ¦ μμ€ν νλ‘κ·Έλλ°] 1. μμ€ν νλ‘κ·Έλλ°, μ»΄ν¨ν° νλμ¨μ΄ ꡬμ±, CPU
2019.05.29