Гость
Map
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Из двоичного буфера в StringList / 15 сообщений из 15, страница 1 из 1
14.08.2022, 20:47
    #116778
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Есть буфер, созданный с помощью AllocMem. Я знаю, что там однобайтные строки, разделенные только #10. Как бы его покрасивей и побыстрей в StringList запихать?
...
Рейтинг: 0 / 0
14.08.2022, 20:48
    #116779
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Не, понятно, что его можно сохранить в файл и прочитать LoadFromFile. А без лишних операций с диском?
...
Рейтинг: 0 / 0
14.08.2022, 20:52
    #116787
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
LoadFromStream жеж.
...
Рейтинг: 0 / 0
14.08.2022, 22:44
    #116828
s62
s62Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
...
Рейтинг: 2 / 0
14.08.2022, 23:26
    #116847
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
Ага, вышло. Когда вышло, подумал, что можно было замутить что-то со StrPas. Чтоб стрим не создавать.
Все-таки Дельфи - классный. Сишарп, как мне кажется, столько свободы не дает.
...
Рейтинг: 0 / 0
14.08.2022, 23:32
    #116849
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
...
Рейтинг: 0 / 0
14.08.2022, 23:41
    #116854
Сквозняк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
А тебе так сильно всрался этот СтрингЛист? Сделай массив строк Rawbytestring и храни там что угодно без опасения что лазарус будет без твоего ведома содержимое строк перекодировать.
...
Рейтинг: 0 / 0
14.08.2022, 23:53
    #116859
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Сквозняк  14.08.2022, 23:41
[игнорируется]
А тебе так сильно всрался этот СтрингЛист? Сделай массив строк Rawbytestring и храни там что угодно без опасения что лазарус будет без твоего ведома содержимое строк перекодировать.
Забыл указать, Delphi XE3.
СтрингЛист удобный.
...
Рейтинг: 0 / 0
15.08.2022, 00:00
    #116863
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Просто Трёп  14.08.2022, 23:32
[игнорируется]
А, кстати, что будет с кодировкой у этого листа?
Implicit string cast from 'AnsiString' to 'string'.
...
Рейтинг: 0 / 0
15.08.2022, 00:12
    #116869
s62
s62Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Просто Трёп  15.08.2022, 00:00
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
А, кстати, что будет с кодировкой у этого листа?
Implicit string cast from 'AnsiString' to 'string'.
Да,
Код: Delphi
1.
StringList.Text := s;
вот тут преобразует в unicode неявно, т.к. левая часть - юникодная.
...
Рейтинг: 0 / 0
15.08.2022, 00:21
    #116872
s62
s62Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
...
Рейтинг: 0 / 0
15.08.2022, 00:37
    #116874
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
s62  15.08.2022, 00:21
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
А, понятно. Для SaveToFile.
...
Рейтинг: 0 / 0
15.08.2022, 19:35
    #117454
Сквозняк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
s62  15.08.2022, 00:21
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
LoadFromStream жеж.
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
Тут есть проблема если в строках есть то, что глупые перекодировщики не смогут перекодировать и заменят вопросительными знаками или прочим неремонтируемым мусором. Вот потому параллельно с классами какие-то данные нужно хранить в равбитестрингах - у них кодировка отсутствует, а потому система не знает как их содержимое правильно портить.
...
Рейтинг: 0 / 0
15.08.2022, 19:57
    #117475
Просто Трёп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
Сквозняк  15.08.2022, 19:35
[игнорируется]
s62  15.08.2022, 00:21
[игнорируется]
Просто Трёп  14.08.2022, 23:32
[игнорируется]
s62  14.08.2022, 22:44
[игнорируется]
Просто Трёп  14.08.2022, 20:52
[игнорируется]
...
Вышло через LoadFromStream?

Если точно известно, что однобайтная строка, то можно как-нибудь типа такого:
Код: Delphi
1.
2.
3.
4.
5.
var s: AnsiString;

SetLength(s, SizeOf(Buf));
Move(Buf, s[1], SizeOf(Buf));
StringList.Text := s;
А, кстати, что будет с кодировкой у этого листа? Насколько я понял, кодировка СтрингЛиста может стать однобайтной только при использовании LoadFromFile и LoadFromStream, если она в файле или стриме однобайтная. А во всех остальных случаях будет юникод.
Вообще, как можно было не сделать однобайтный стринглист? Куча же задач, где юникод не нужен.
Если я правильно понимаю, то в самом TStringList строки двухбайтовые, юникодные. Но он может загрузить содержимое из файла с однобайтными строками и тогда запомнит эту кодировку в свойстве Encoding и при сохранении в файл сохранит в этой же кодировке, если не указать кодировку явно.
Тут есть проблема если в строках есть то, что глупые перекодировщики не смогут перекодировать и заменят вопросительными знаками или прочим неремонтируемым мусором. Вот потому параллельно с классами какие-то данные нужно хранить в равбитестрингах - у них кодировка отсутствует, а потому система не знает как их содержимое правильно портить.
Ну да. Это повод для большого холивара. Вот, например, разраб HWiNFO пишет в логи однобайтные строки ASCII и использует код B0 (символ градуса в большинстве шрифтов °). Как можно догадаться, что это символ градуса? В шрифте Terminal это другой символ. То есть, человек легко определит проблему по контексту, скажет: "Ага, надо вот эту кодировку использовать". А программно как? И те, и другие строки однобайтные.
...
Рейтинг: 0 / 0
17.08.2022, 09:02
    #118279
eNose
Участник
[не активирован]
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из двоичного буфера в StringList
нефиг в логах использовать хрен знает что
...
Рейтинг: 0 / 0
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Из двоичного буфера в StringList / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]