真正长的整型字符串到整型的转换

Really long integer string to int conversion

本文关键字:整型 转换 字符串      更新时间:2023-10-16

我从Google Drive API获得此值作为驱动器大小。

16106127360

如何在c++ Builder中将该字符串转换为int/long/unsigned类型。

  1. StrToInt()不能,它说无效整数。
  2. atol()也失败,它返回乱码值
  3. 环礁()?我似乎不能在c++ Builder
  4. 中使用该函数

c++构建器的什么数字数据类型可以保存值16106127360 ?

谢谢

16106127360太大,无法容纳32位(unsigned) int 1。该值需要64位(unsigned) __int64或(unsigned) long long来代替。

有很多不同的方法可以将这样的字符串值转换为64位整数变量:

  • SysUtils.hpp报头中的__int64值有StrToInt64()StrToInt64Def()TryStrToInt64()函数:

    __int64 size = StrToInt64("16106127360");
    

    __int64 size = StrToInt64Def("16106127360", -1);
    

    __int64 size;
    if (TryStrToInt64("16106127360", size)) ...
    

    (在现代c++ Builder版本中,unsigned __int64值也有相应的UInt64函数)

  • stdlib.h头中有strtoll()/wcstoll()函数:

    long long size = strtoll("16106127360");
    

    long long size = wcstoll(L"16106127360");
    
  • stdio.h头文件中有sscanf函数。使用%lld%llu格式说明符:

    long long size;
    sscanf("16106127360", "%lld", &size);
    

    unsigned long long size;
    sscanf("16106127360", "%llu", &size);
    

    long long size;
    swscanf(L"16106127360", L"%lld", &size);
    

    unsigned long long size;
    swscanf(L"16106127360", L"%llu", &size);
    
  • 您可以在sstream头中使用std::istringstreamstd::wistringstream:

    std::istringstream iis("16106127360");
    __int64 size; // or unsigned
    iis >> size;
    

    std::wistringstream iis(L"16106127360");
    __int64 size; // or unsigned
    iis >> size;
    

1:(如果你正在为iOS 9编译你的c++ Builder项目,long是64位的,否则在其他支持的平台上是32位的)

查看此可运行程序

这段代码,使用stringstream,应该可以工作:

#include <sstream>
#include <iostream>
#include <string>
int main()
{
    std::string ss = "16106127360";
    std::stringstream in;
    in << ss;
    long long num;
    in >> num;
}