Как я могу сделать строки Delphi с фиксированной длиной использовать широкие символы?

StackOverflow https://stackoverflow.com/questions/4794285

Вопрос

При Delphi 2010 (и, вероятно, также под D2009) тип строки по умолчанию является единодельзированием.

Однако, если мы объявим ...

const
 s  :string = 'Test';
 ss :string[4] = 'Test';

... затем первая строка с Если объявлено как Единоодерирование, но второй SS объявлен как Ansistring!

Мы можем проверить это: SizeOf(s[1]); вернет размер 2 и SizeOf(ss[1]); вернет размер 1.

Если я объявлю ...

var
  s  :string;
  ss :string[4];

... чем я хочу этого SS также является единодельзирующим типом.

  1. Как я могу сказать Delphi 2010, что обе строки должны быть единодельзирующим типом?
  2. Как еще я могу объявить это SS держит четыре видехара? Компилятор не примет объявления типа WideString[4] или же UnicodeString[4].
  3. Какова цель двух другой Объявления компилятора за то же самое тип имя: нить?
Это было полезно?

Решение

Ответ на это заключается в том, что string[n], что ShortString, теперь считается наследием. Embarcadero принял решение не конвертировать ShortString иметь поддержку Unicode. Поскольку была введена длинная строка, если моя память служит правильно, в Delphi 2, это кажется для меня разумным решением.

Если вы действительно хотите массивы с фиксированной длиной WideChar, вы можете просто объявить array [1..n] of char.

Другие советы

  1. Вы не можете, используя string[4] как тип. Объявление этого автоматически делает его коротким.

  2. Вместо этого объявите его как массив ЧАР, что сделает его массивом из 4 видехаров.

  3. Потому что а string[4] делает его строкой, содержащей 4 символа. Однако, поскольку WideChars может быть более одного байта в размерах, это было бы а) неправильным и б) запутанным. Шортстранины все еще существуют для обратной совместимости и являются автоматически Ansistrings, потому что они состоят из [x] одного байтового Chars.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top