Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Кодировки символов. Unicode.




Чтобы реализовать возможность компиляции и ANSI, и Unicode C++ одновременно, нужно заменить в программе заголовочный файл String.h на TChar.h Он помогает создавать универсальный исходный код, способный задействовать как ANSI, так и Unicode. Он состоит из макросов, заменяющих явные вызовы str- или wcs-функций. Если при компиляции исходного кода Вы определяете _UNICODE, макросы ссылаются на wcs-функции, а в его отсутствие — на str-функции.

  ANSI UNICODE универсальный исходный код (TChar.h)
Символ char wchar_t TCHAR
Строка char*STR wchar_t*WSTR PTSTR TCHAR*
Литерал “строка” L”строка” _TEXT (“строка”)
Const строка PCSTR PCWSRT PCTSTR

Существует две функции CreateWindowEx: одна принимает строки в Unicode, другая — в ANSI. Все так, но в действительности прототипы этих функций чуть-чуть отличаются:


HWND WINAPI CreateWindowExW (

DWORD dwExStyle,

PCWSTR pClassName,

PCWSTR pWindowName,

DWORD dwStyle, int X, Int Y,

int nWidth, int nHeight,

HWND hWndParent,

HMENU hMenu,

HINSTANCE hInstance,

PVOID pParam);

HWND WINAPI CreateWindowExA (

DWORD dwExStyle,

PCSTR pClasaName,

PCSTR pWindowName,

DWORD dwStyle, int X, int Y,

int nWidth, int nHeight,

HWND hWndParent,

HMENU hMenu,

HINSTANCE hInstance,

PVOID pParam);


CreateWindowExW — это Unicode-версия. Буква W в конце имени функции — аббревиатура слова wide (широкий). Буква A в конце имени CreateWindowExA указывает, что данная версия функции принимает ANSI-строки.

Windows-функция MultiByteToWideChar преобразует мультибайтовые символы строки в «широкобайтовые». Обратное преобразование выполняет функция WideCharToMultiByte.

Все символы в Unicodeпредставлены 16-битными значениями (по 2 байта на каждый). В них нет особых байтов, указывающих, чем является следующий байт – частью того же символа или новым символом. Это значит, что прохождение по строке реализуется простым увеличением или уменьшением значения указателя. Unicode позволяет кодировать 65 536 символов.

Для использования Unicode-строк в библиотеки C++ были введены некоторые новые типы данных. Стандартный заголовочный файл String.h модифицирован: в нем определен wchar_t — тип данных, для Unicode-символа:

typedef unsigned short wchar_t;

Список строковых функций ANSI С++ и эквивалентных им Unicode-функций.

1) char * strcat(char *, const char *);

wchar_t * wcscat(wchar_t *, const wchar_t *);

2) char * strchr(const char *, int);

wchar_t * wcschr(const wchar_t *, wchar_t),

3) int strcmp(const char *, const char *,

int wcscmp(const wchar_t *, const wchar_t *);

4) char * strcpy(char *, const char *),

wchar_t * wcscpy(wchar_t *, const wchar_t *),

5) size_t strlen(const char *),

size_t wcslen(const wchar_t *),

Имена всех Unicode-функций начинаются с wcs — это аббревиатура wide character set (набор широких символов).


Поделиться:

Дата добавления: 2015-04-21; просмотров: 137; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты