Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > WideString определённого размера


Автор: AXS 4.5.2014, 17:38
Корень проблемы в том, что Socket.SendBuf() не желает отправлять/принимать записи (record) содержащие параметры типа string, ибо обычная строка это просто указатель на строку (? не уверен так ли я понял компилятор, но что-то вроде того).
То есть:
Код

type 
  TRecL = record
    s1: string;
    s2: string;
  end;

  TRecS = record
    s1: string[255];
    s2: string[255];
  end;

var
  RecL: TRecL;
  RecS: TRecS;

//. . .

  Socket.SendBuf(RecL, SizeOf(RecL)); // Не взлетит
  Socket.SendBuf(RecS, SizeOf(RecS)); // Взлетит


Но это не решает проблему, так как я работаю со специфичными символами (нид юникод). А решение выше имеет такой побочный эффект:

Код

  RecL.s1:= 'aұ⌘e';  
  RecL.s2:= 'cіздің';

  // В выводе и отладчике вижу RecL = ((s1:'aұ⌘e'), (s2:'cіздің'))

  RecS.s1:= RecL.s1;
  RecS.s2:= RecL.s2;

  // В выводе и отладчике вижу RecS = ((s1 : 'a??e'), (s2 : 'cізді?'))  


Пишу в XE5, где строки по умолчанию в юникоде, но как видно string[xx] превращается в анси.

Как это можно побороть? Существует ли что-то вроде widestring[xx]?

Автор: Illusion Dolphin 4.5.2014, 19:06
Код

  TRecX = record
    s1: array[1..255] of WideChar;
    s2: array[1..255] of WideChar;
  end;

Плюс надо хранить длинну или нулём оканчивать строку. 

Автор: AXS 5.5.2014, 17:43
Цитата(Illusion Dolphin @ 4.5.2014,  19:06)
Код

  TRecX = record
    s1: array[1..255] of WideChar;
    s2: array[1..255] of WideChar;
  end;

Плюс надо хранить длинну или нулём оканчивать строку.

Строки вносить побайтово в цикле или есть какая-то функция?

Автор: CynicRus 5.5.2014, 18:57
Ну если у тебя именно байты, то
Код

Функция Chr ( X: Byte ): Char; 

Автор: AXS 6.5.2014, 07:10
Нет, меня интересует как правильно перенести строки из записи со строками в запись с массивами. То есть из:

Код

  TRecL = record
    s1: string;
    s2: string;
  end;


в

Код

  TRecX = record
    s1: array[1..255] of WideChar;
    s2: array[1..255] of WideChar;
  end;


StrPCopy не подходит

Автор: bems 7.5.2014, 03:46
Move

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)