Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Вниз

Подскажите про работу с PWideChar.   Найти похожие ветки 

 
MegaVolt_old   (2008-11-10 15:58) [0]

Добрый день.
Столкнулся с необходимостью работы с PWideChar. Где можно почитать про особенности, какие функции есть для этого. Для PСhar есть отдельные функции для объединения строк, поиска в них и пр... Есть ли подобные для PWideChar?
Всегда ли длинна символа 2 байта? Если нет то как работет механизм извлечения нного символа? Полным чтением строки до заданного? Если все символы 2 байта то как обходятся с символами требующими больше байт?


 
clickmaker ©   (2008-11-10 16:17) [1]

> Есть ли подобные для PWideChar?

если про API, то теже, только с окончанием W. lstrcpyW, lstrlenW etc

> Всегда ли длинна символа 2 байта

для данной реализации - да. UTF-16.

> Если все символы 2 байта то как обходятся с символами требующими
> больше байт

Для этого придумали UTF-8 и UTF-32


 
MegaVolt_Old   (2008-11-10 16:44) [2]

>если про API, то теже, только с окончанием W. lstrcpyW, lstrlenW etc

Ага оно. Недопетрил что дельфи исспользует lstrcpy с разными типа переменных :)

>Для этого придумали UTF-8 и UTF-32

Т.е. есть символы который через TWideChar нельзя отобразить?


 
clickmaker ©   (2008-11-10 16:46) [3]

> Т.е. есть символы который через TWideChar нельзя отобразить?

ну да. UTF-8 - это вообще отдельная песня. В случае, если там используются символы, требующие более одного байта, то даже не вычислишь сразу длину строки (простым подсчетом) - нужен полный анализ. Поскольку там могут быть и однобайтные символы и двух- и трех-байтные вперемешку


 
Anatoly Podgoretsky ©   (2008-11-10 18:55) [4]

Справка просто забита информацией, кроме того несложно догадаться, что большинство особых функций начинается с Wide


 
MegaVolt_Old   (2008-11-10 19:16) [5]

>большинство особых функций начинается с Wide

Как оказалось чать нужных мне аналогичны тем же для Pchar и на wide не начинаются.

На счёт забита это речь про D7 идёт? В справке на Wide есть десяток тем из них добрая половина преобразование из WideString и String и прочие форматы и обратно. Остальные сравнение и форматирование. Простого сложения строк по Wide я ненашел. Поэтому и задал вопрос. Окзалось что всё ещё проще.


 
Anatoly Podgoretsky ©   (2008-11-10 19:23) [6]

> MegaVolt_Old  (10.11.2008 19:16:05)  [5]

Это не особые функции, а перекрытые со старыми названиями, но если ты посмотрел справку, то увидел бы это.


 
MegaVolt_Old   (2008-11-10 19:33) [7]

>Это не особые функции, а перекрытые со старыми названиями

Это я понял уже после первого ответа :)

>если ты посмотрел справку, то увидел бы это

Да зная что искать я нашел в конце справки про null-terminated strings приписку что всё вышеописанное относится и к Wide string. Просто я просматривал начало статьи в справке и про wide там небыло упомянуто :(


 
Anatoly Podgoretsky ©   (2008-11-10 20:12) [8]

> MegaVolt_Old  (10.11.2008 19:33:07)  [7]

В справке конечно очень много статей, но организовано это бардачно, связать в целое нелегко. Надо бегать по ссылкам в справке и то не все удастся найти. Ты еще справку из Д200х не видел. Но формально информации в справке очень много.


 
MegaVolt_Old   (2008-11-11 14:34) [9]

>Но формально информации в справке очень много.

Согласен. Но честно говоря я не осилил найти :( Кстати вчера перерыл справку дополнительно. Про PWideChar функции говорится только в той части где про WinApi до неё я не добрался :(


 
Anatoly Podgoretsky ©   (2008-11-11 15:20) [10]

> MegaVolt_Old  (11.11.2008 14:34:09)  [9]

Да какая информация может быть, это же указатель на WideChar - по сути PChar, поэтому по этому слову искать не стоит, искать надо по WideChar, WideString, по строковым функциям, по функциям начинающих с Wide


 
MegaVolt_Old   (2008-11-11 15:27) [11]

>по функциям начинающих с Wide

Это же функции для работы ы WideString а не WideChar. Я понимаю что разница очень символична. Но всё же.

А искал и по Wide и по PWideChar просто не там. Надо было в справке по WinApi рыть :)


 
Anatoly Podgoretsky ©   (2008-11-11 15:36) [12]

> MegaVolt_Old  (11.11.2008 15:27:11)  [11]

Ее нет string обратно совместим с PChar. WideString аналогично.


 
Anatoly Podgoretsky ©   (2008-11-11 15:38) [13]

Собственно все заканчивается на PWideChar(WideString), а назад даже приведения не требуется.


 
MegaVolt_Old   (2008-11-11 15:51) [14]

>string обратно совместим с PChar.

А как же счётчик ссылок на строку по отрицательному смещению? И длинна строки. В Pchar же этих элементов нет.

> WideString аналогично.

Wide String тоже содержит свою длинну по отрицательному смещению. PWideChar нет.

А так да оба указатели на стоку.


 
Anatoly Podgoretsky ©   (2008-11-11 15:57) [15]

> MegaVolt_Old  (11.11.2008 15:51:14)  [14]

А они не нужны, ни одна функция АПИ не меняет размер переданого буфера и его адрес. Поэтому совместимость 100 процентная, гарантированая.


 
MegaVolt_Old   (2008-11-11 16:04) [16]

Ух ты... Незнал. Спасибо.


 
Anatoly Podgoretsky ©   (2008-11-11 16:35) [17]

> MegaVolt_Old  (11.11.2008 16:04:16)  [16]

Надо было еще сказать, что string автоматически включает заключительный символ #0, что требуется для правильной работы Pchar. В отличии от классического Pchar, где за этим должен следить программист, соответсвенно ошибок меньше.


 
MegaVolt_Old   (2008-11-12 10:16) [18]

Функции для работы с Pchar вроде бы автоматом присваивают #0 на конце? По крайней мере при присваивании точно
Var
 p:Pchar;
...
p:="Hello"; // Ноль присвоен автоматом.

Получается есть ситуации где ноль присваивается а есть где нет?


 
clickmaker ©   (2008-11-12 10:53) [19]

> p:="Hello"; // Ноль присвоен автоматом.

потому что константа.
Если напишешь свою функцию, например, для копирования, то ноль должен будешь поставить сам


 
MegaVolt_Old   (2008-11-12 11:33) [20]

>Если напишешь свою функцию

Это понятно :)
А если же функции стандартные то за нулём следить вроде не нужно или я ошибаюсь?


 
clickmaker ©   (2008-11-12 11:39) [21]

> не нужно или я ошибаюсь?

не нужно
единственное, за чем нужно следить, чтобы не было переполнения буфера, выделенного под строку. Поскольку апишные функции за этим следить не имеют возможности.


 
MegaVolt_Old   (2008-11-12 12:08) [22]

>единственное, за чем нужно следить, чтобы не было переполнения буфера

Ага.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.049 c
2-1226666724
vegarulez
2008-11-14 15:45
2008.12.21
Вопрос про taCenter у TLabel`a(vcl)


15-1224121618
МемТест
2008-10-16 05:46
2008.12.21
Как можно использовать GPU для рассчётов?


15-1224490553
Михаил2
2008-10-20 12:15
2008.12.21
Unicode, зачем так сделано


2-1226181426
Scary
2008-11-09 00:57
2008.12.21
StringGrid и полоса прокрутки


1-1204293724
Kolan
2008-02-29 17:02
2008.12.21
Реализация интерфейса-мастера.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский