Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.045 c