截断一个反串 我正在使用RAD Studio,C++ Builder。翻译字符串大小为~2^31个字符。我应该如何检查长度 if(ExportFileName.Length() > ??? ) { ExportFileName. ??? } m_ActionsHelper.LastPdfFile = ExportFileName;

截断一个反串 我正在使用RAD Studio,C++ Builder。翻译字符串大小为~2^31个字符。我应该如何检查长度 if(ExportFileName.Length() > ??? ) { ExportFileName. ??? } m_ActionsHelper.LastPdfFile = ExportFileName;,c++,c++builder,ansistring,C++,C++builder,Ansistring,正如我在中看到的,Delete的两个参数都是int,其最大值远低于2^31。看来你不需要这样的支票 无论如何,如果要获得2的整数幂,可以使用二进制移位运算符: 1ull << 31 或 ExportFileName.SetLength(1)对于大数据,我会说 ANSCORS/不是正确的容器。如果它是来自文件的数据,而是考虑使用内存映射。对于您的问题,您要寻找的值是“代码> 0x7FFFFFFUL/。但是,如果您获得了超过该值的长度,那么它就已经到了LATE。我应该如何截断它?使用D

正如我在中看到的,
Delete
的两个参数都是
int
,其最大值远低于
2^31
。看来你不需要这样的支票

无论如何,如果要获得
2
的整数幂,可以使用二进制移位运算符:

1ull << 31


ExportFileName.SetLength(1)对于大数据,我会说<代码> ANSCORS/<代码>不是正确的容器。如果它是来自文件的数据,而是考虑使用内存映射。对于您的问题,您要寻找的值是“代码> 0x7FFFFFFUL/<代码>。但是,如果您获得了超过该值的长度,那么它就已经到了LATE。我应该如何截断它?使用Delphi?在我的评论中,到那时已经很晚了,你已经超过了极限。如果<代码> ANSISSHIG/<代码>允许你甚至超过这样的限制。我仍然强烈建议你在把大量的内容存储在<代码> ANSISSHIG/<代码>之前,先考虑其他选项,但是如果你坚持,我建议你更改你的代码来检查LeN。gth,然后再追加到字符串。如果当前长度加上要追加的字符串长度等于long,则不追加。因此无需截断。如何存储大于
MaxInt
(0x7FFFFFFF)的数据首先是
AnsiString
中的字符?在
AnsiString
达到该大小之前很久,您就应该从RTL中获得内存错误。要截断字符串,我应该使用Delete?我不知道这个框架,但正如我在参考中看到的,它应该类似于
ExportFileName.Delete(1但length返回int,一个1@AlexandraTupu在C++中,只有文字可以用十六进制表示。<代码> 1
Operation   Bits   Shifted bits 10-based
1 << 1    00000001   00000010      2
1 << 2    00000001   00000100      4
4 << 2    00000100   00010000      16
ExportFileName.Delete(1 << 10, ExportFileName.Length());
ExportFileName.SetLength(1 << 10);