|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.05.2014, 00:01 | #1 |
Новичок
Джуниор
Регистрация: 18.05.2014
Сообщений: 2
|
Строки в C++, отличие char* и wchar_t*
Объясните кто-то - чем отличаются строки char* и wchar_t* ? Из прочитанного вроде ясно следующее:
1)wchar_t* - это вроде как Unicode строка (sizeof(wchar_t) выдает 2 байта на символ) - этот тип строки "хавает" символы любого алфавита. 2)а вот char* - это что за строка (sizeof(char) выдает 1 байт на символ)? Multi-Byte строка что ли? В таком случае выходи тоже юникод, тогда какой - UTF7 или UTF8? Или же это вобще ASCII строка? Но вот в VS в настройках проекта есть опция Character Set - которая меняет представление строк с Unicode на Multi-Byte - но каких строк, если wchar_t* и char* - это уже какие-то типы строк (вопросы в пунктах 1 и 2)? p.s. Если не сложно - могли бы привести аналогию со строками в Delphi, что бы легче понимать. |
19.05.2014, 01:17 | #2 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
wchar_t в винде - это подмножество уникода UCS-2 (с фиксированной длинной символов)
wchar_t в unix - это utf-32 и занимает соответственно 4 байта в обычном чаре может быть как однобайтовая, так и мультибайтовая кодировка (utf-8) Но вот в VS в настройках проекта есть опция Character Set - которая меняет представление строк с Unicode на Multi-Byte - но каких строк, если wchar_t* и char* - это уже какие-то типы строк (вопросы в пунктах 1 и 2)? эта настройка в основном для WinAPI и оберток TCHAR, LPCTSTR etc
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
19.05.2014, 01:39 | #3 |
Новичок
Джуниор
Регистрация: 18.05.2014
Сообщений: 2
|
Т.е. выходит, и wchar_t*, и char* - это юникод строки, только первый тип имеет фиксированный размер символов (в win это 2 байта (utf-16), а в unix - 4 байта(utf-32), так что ли?), а второй тип может представлять строки с размером символов от 1 до 4 байт (utf-7, utf-8 и набор ASCII, так что ли?). Верно или что-то снова напутал?
Но а как тогда utf-32 строка представлена в win, если wchar_t* - это utf-16 выходит (ведь 2 байта)? Или wchar_t* может быть как utf-16, так и utf-32? Последний раз редактировалось HelloUser; 19.05.2014 в 01:49. |
19.05.2014, 08:41 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
char - это знаковый 8 бит тип. Будет он хранить UTF7, UTF8, ANSI, ASCII или что-то еще это по барабану - это зависит от того, как интерпретировать данный.
Стандартное API Windows интерпретирует wchar_t как UCS2 (но ничего вам не мешает хранить там для себя что угодно в виде того же UTF16 скажем) а char как ANSI. Внутренне на всех NT базированных платформах все переводится в wchar_t/UCS2 |
06.06.2017, 13:22 | #5 |
Новичок
Джуниор
Регистрация: 06.06.2017
Сообщений: 1
|
Массив char увеличить в два раза и в цикле после каждого char добавить
0x00. Нолики - старшие разряды. Было "123"(0x31 0x32 0x33) , а будет 0x31 0x00 0x32 0x00 0x33 0x00. |
04.05.2021, 22:19 | #6 |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
Я взял тупо в char по 1му байту записал и получил нужные символы, ну мне эти старшие разряды не нужны а числа там помещались в 1 байт
|
13.08.2021, 14:05 | #7 |
Заблокирован
Регистрация: 17.12.2018
Сообщений: 514
|
unicod «весит» 4 байта, а в utf8 отлично раздувается до шести. wchar_t* – отличается **единицей хранения**: байты в whcar_t* строго парные, а char* нарезается поштучно. Юникод же можно навертеть и поверх char. И приличная часть utf16 помещается в одну пару байтов, что несколько повышает вероятность достаточности отдельно взятого whar_t. Но всё равно пришлось завести коды для указания того, что вот этот вот конкретный символ utf16 в одну пару не влез и занял целых две.
Последний раз редактировалось taras-proger77; 13.08.2021 в 14:07. |
13.08.2021, 21:29 | #8 |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
|
13.08.2021, 21:34 | #9 |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
|
13.08.2021, 21:43 | #10 |
Форумчанин
Регистрация: 04.10.2020
Сообщений: 136
|
а ну да есть и на 6 байт символы.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
char или wchar_t, ANSI или Unicode? | Vladiger | Общие вопросы C/C++ | 7 | 09.10.2013 17:13 |
string-char-wchar_t-char-string чето потерял | magog7 | Общие вопросы C/C++ | 0 | 08.08.2011 20:21 |
char в wchar_t | softrix | Общие вопросы C/C++ | 5 | 08.11.2010 15:40 |
В заголовок окна выводится только 1 символ из строки( wchar_t ) | Руслантус | Win Api | 4 | 30.11.2009 19:45 |