Усечь AnsiString

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

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

1 ответ

Решение

Как я вижу в ссылке, оба параметра 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, Если это уже удовлетворяет, никакие действия не будут выполнены.

Другие вопросы по тегам