Усечь AnsiString - PullRequest
       68

Усечь AnsiString

0 голосов
/ 02 мая 2018

Я работаю с Rad Studio, C ++ Builder. Размер AnsiString составляет ~ 2 ^ 31 символов. Как мне проверить длину?

if(ExportFileName.Length() > ??? )
  {
    ExportFileName. ???
  }
  m_ActionsHelper.LastPdfFile = ExportFileName;

1 Ответ

0 голосов
/ 02 мая 2018

Как я вижу в справочнике , оба параметра Delete имеют значение int, максимальное значение которого меньше, чем 2^31. Кажется, вам не нужна такая проверка.

В любом случае, если вы хотите получить целое число 2, вы можете использовать оператор двоичного сдвига:

1ull << 31

Оператор двоичного сдвига обрабатывает биты целого числа таким образом, что все биты сдвигаются в требуемом направлении. Например,

Operation   Bits   Shifted bits 10-based
1 << 1    00000001   00000010      2
1 << 2    00000001   00000100      4
4 << 2    00000100   00010000      16

И так далее. Так что 1ull << 31 это 2^31. ull означает, что мы используем 64-битное число, потому что int слишком мало для него.

Чтобы удалить лишний хвост, используя Delete, он должен выглядеть как

ExportFileName.Delete(1 << 10, ExportFileName.Length());

или

ExportFileName.SetLength(1 << 10);

И, вероятно, вам не нужно заранее проверять длину. Просто Delete или SetLength. Если это уже удовлетворяет, никакие действия не будут выполнены.

...