Просмотр полной версии : String в Widestring как?
Получаю я пакет от сервера:
http://rghost.ru/36862956/image.png (http://rghost.ru/36862956.view)
С помощью след. кода:
var s1:string;
begin
s1:=tcp.Receiveln();
m1.Lines.Add(s1);
end;
Вывод в мемо:
http://rghost.ru/36862999/image.png (http://rghost.ru/36862999.view)
Т.е. Получается строка Юникода находится в Анси s1:string;.
Как можно нормально вывести типа как делает l2phx в преобразовании.
function PWideToString(pw: PWideChar): string;
var
p: PChar;
iLen: integer;
begin
iLen := lstrlenw(pw) + 1;
GetMem(p, iLen);
WideCharToMultiByte(CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil);
Result := p;
FreeMem(p, iLen);
end;
Спасибо, с тем разобрался, но вот вопрос еще
var pck:widestring;
size:word;
begin
tcp.ReceiveBuf(size, 2);
SetLength(pck, size-2);
tcp.ReceiveBuf(pck[1], size-2);
m1.Lines.Add(pck);
end;
Получаю вывод с какойто лишней инфой, которой в пакете вообще нет
"Best Minecraft§1§352\drivers\etc\services"
Красного в пакете вообще нет, откуда оно берется и как с ним бороться подскажите пожалуйста
tcp.ReceiveBuf(pck[1], size-2);
m1.Lines.Add(pck);
Как у тебя при этом AV не случается вообще?
Ты бы пакет в строку конвертировал сначала по принципу каждый байт пакета через IntToHex в 16 формат....
А то у тебя кракозябры должны в Мемо сыпаться..
Пакет же не строка... а массив байт, и чтобы он стал читаемым его конвертировать надо в строку по нужному тебе представлению.
var S:string;
for i:=0 to size-1 do S:=S+IntToHex(pck[i],2);
Хотябы так...
Да нет нормально выводится.
Вот только предполагаемый размер всегда равен 255 и поэтому выводится лишнее с памяти системы.
Использую простой TcpClient
Ну хз, если символы псевдографики и прочая лабуда это нормально ))))
дак если известна длина строки копируй ее в буфер какойнеть чтоб был 0-терминальный символ. у тя в пакете либо предполагаетса что длина строки постоянна (что врятли), либо гдето указаен ее размер.
у тя в пакете у строки нет завершающего нулевого символа поэтому в строку читаетса все содержимое опосля нее, всякий мусор из памяти)))
как уже прально подметили простое чтение строки при определенных раскладах может повлеч и AV
Тему можно клоус, переписал на java..
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot