Как я могу сделать строки Delphi с фиксированной длиной использовать широкие символы?
-
24-10-2019 - |
Вопрос
При 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 также является единодельзирующим типом.
- Как я могу сказать Delphi 2010, что обе строки должны быть единодельзирующим типом?
- Как еще я могу объявить это SS держит четыре видехара? Компилятор не примет объявления типа
WideString[4]
или жеUnicodeString[4]
. - Какова цель двух другой Объявления компилятора за то же самое тип имя: нить?
Решение
Ответ на это заключается в том, что string[n]
, что ShortString
, теперь считается наследием. Embarcadero принял решение не конвертировать ShortString
иметь поддержку Unicode. Поскольку была введена длинная строка, если моя память служит правильно, в Delphi 2, это кажется для меня разумным решением.
Если вы действительно хотите массивы с фиксированной длиной WideChar, вы можете просто объявить array [1..n] of char
.
Другие советы
Вы не можете, используя
string[4]
как тип. Объявление этого автоматически делает его коротким.Вместо этого объявите его как массив ЧАР, что сделает его массивом из 4 видехаров.
Потому что а
string[4]
делает его строкой, содержащей 4 символа. Однако, поскольку WideChars может быть более одного байта в размерах, это было бы а) неправильным и б) запутанным. Шортстранины все еще существуют для обратной совместимости и являются автоматически Ansistrings, потому что они состоят из [x] одного байтового Chars.