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

Вниз

получить строку   Найти похожие ветки 

 
12345   (2013-10-08 17:12) [0]

есть буфер в котором находится строка и его длина:

Buf: Pointer;
BufLen: Integer;

как его преобразовать в строку?


 
RWolf ©   (2013-10-08 17:30) [1]

SetLength(s, BufLen);
if BufLen <> 0 then Move(Buf^, s[1], BufLen);


 
icWasya ©   (2013-10-08 17:36) [2]

SetString+F1


 
Ega23 ©   (2013-10-08 21:49) [3]

Строка в буфере может быть ансишной, юникодной, утф-8.
Недостаточно условий для однозначного решения.


 
KilkennyCat ©   (2013-10-09 00:10) [4]


> Ega23 ©   (08.10.13 21:49) [3]

а причем здесь это?
у нас есть адрес, есть размер. а квадратиками это на экране будет или кириллица, или потребует преобразования - дело десятое.


 
Германн ©   (2013-10-09 00:30) [5]


> KilkennyCat ©   (09.10.13 00:10) [4]
>
>
> > Ega23 ©   (08.10.13 21:49) [3]
>
> а причем здесь это?

Так от этого зависит второй параметр SetLength.


 
Inovet ©   (2013-10-09 00:37) [6]

> [5] Германн ©   (09.10.13 00:30)
> SetLength

Для UTF-8 особенно интересно.


 
KilkennyCat ©   (2013-10-09 01:06) [7]


> Германн ©   (09.10.13 00:30) [5]

независит.
преобразование предполагает получение массива вместо указателя.


 
sniknik ©   (2013-10-09 02:08) [8]

> получение массива вместо указателя.
массива? хотят строку. перечитай вопрос.

если бы нужен был массив, то посоветовал бы вообще ничего не делать, без разницы, что не типизированный указатель на последовательность байт, что указатель массива на те же байты... какая разница?

в чем ты видишь тогда ответ, если без преобразований (вернее "типизации"), в бессмысленном копировании байт из одного места в другое?


 
KilkennyCat ©   (2013-10-09 04:39) [9]


> sniknik ©   (09.10.13 02:08) [8]

согласен. бессмысленно


 
Ega23 ©   (2013-10-09 10:22) [10]


> а причем здесь это?
> у нас есть адрес, есть размер. а квадратиками это на экране
> будет или кириллица, или потребует преобразования - дело
> десятое.


Дык у меня размер буфера, а не размер строки.
"мама мыла раму" - 14 байт в ansi, 28 в utf-16, 26 байт в utf-8.
Неполное условие.


 
KilkennyCat ©   (2013-10-09 10:32) [11]


> Ega23 ©   (09.10.13 10:22) [10]
>

но ведь оно всегда неполное, тогда. хоть немного, но не полное. например,
> "мама мыла раму"
в шрифте видивингс или как там его.


 
Inovet ©   (2013-10-09 10:45) [12]

> [11] KilkennyCat ©   (09.10.13 10:32)
> хоть немного, но не полное. например,

когда выключен монитор.


 
Dimka Maslov ©   (2013-10-09 11:46) [13]

Всегда делаю
S := PChar(P)
а проблема с кодировками решается только на момент передачи сохранения в файла, чтения из файла


 
sniknik ©   (2013-10-09 12:34) [14]

> Всегда делаю
нет гарантий что передается нультерминированная последовательность... даже скорее обратное, т.к. параллельно есть BufLen.
+ при юникоде 0 может быть частью символа, т.к. есть вероятность что в вайл будешь 1 символ сохранять, при n получунных.


 
Ega23 ©   (2013-10-09 13:47) [15]


> Всегда делаю
> S := PChar(P)


По адресу P лежит анси-строка. А Delphi - 2010 (или выше). И приехали.


 
Германн ©   (2013-10-09 14:09) [16]

Да вообще автору надо было сразу использовать строку (анси или короткую) в качестве приемного буфера. Тогда и вопросов бы глупых не было. :)


 
Dimka Maslov ©   (2013-10-09 14:17) [17]


> Ega23 ©   (09.10.13 13:47) [15]


Тогда вопрос, откуда взялась ansi-строка? Об этом ничего не говорится. И вообще у себя я всегда делаю так, чтобы ansi-строк было как можно меньше. Совсем ноль. Другое дело, если строка получена извне, что без знания содержимого буфера правильно преобразовать в строку невозможно.


> sniknik ©   (09.10.13 12:34) [14]


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


 
Ega23 ©   (2013-10-09 14:36) [18]


> Тогда вопрос, откуда взялась ansi-строка? Об этом ничего
> не говорится. И вообще у себя я всегда делаю так, чтобы
> ansi-строк было как можно меньше. Совсем ноль. Другое дело,
>  если строка получена извне, что без знания содержимого
> буфера правильно преобразовать в строку невозможно.


Ну мы же сейчас сферическую строку в вакууме разбираем, не так ли? По крайней мере, изначальный сабж выглядит именно так: что за строка - неизвестно, кто этот буфер сформировал - неизвестно.
Именно потому я и написал, что данные неполные.


 
Dimka Maslov ©   (2013-10-09 16:06) [19]


> Ega23 ©   (09.10.13 14:36) [18]


Даже если строка сферическая в вакууме, то можно попытаться определить, что за строка, unicode, ansi или utf8. Но это уже совсем другая задача.



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

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

Наверх





Память: 0.49 MB
Время: 0.002 c
15-1391254319
xayam
2014-02-01 15:31
2014.08.31
Проводник для больших папок


2-1380735763
zibert
2013-10-02 21:42
2014.08.31
типы


6-1272172077
Владимир Павлович
2010-04-25 09:07
2014.08.31
Папка с куками для конкретного TWebbrowser


2-1381050306
Антипов В.А.
2013-10-06 13:05
2014.08.31
Как расшифровать коды сканера штрих-кодов?


15-1391185991
Jeer
2014-01-31 20:33
2014.08.31
Э..один раз умирать:)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский