真正长的整型字符串到整型的转换
Really long integer string to int conversion
我从Google Drive API获得此值作为驱动器大小。
16106127360
如何在c++ Builder中将该字符串转换为int/long/unsigned类型。
- StrToInt()不能,它说无效整数。
- atol()也失败,它返回乱码值
- 环礁()?我似乎不能在c++ Builder 中使用该函数
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::istringstream
或std::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;
}
相关文章:
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 将整型转换为浮点型时检测溢出
- 是否存在将长整型转换为指针有效的情况
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- C++:将无符号长整型长整型转换为无符号长整型
- 在 c++ 中将长整型转换为十六进制和二进制
- 初始化时无法将长整型*转换为双精度*
- C++:将无符号长整型转换为矢量<uint8_t>原始数据
- 整型转换为字符数组
- 将长整型转换为结构指针
- c++中的双精度到整型转换
- 将整型转换为双精度
- 无符号整型转换
- 将整型转换字节中的字节更改为整数
- 从整型转换为双精度
- 试图将整型转换为void以按值传递给pthread函数
- 将整型转换为字符串
- 整型转换为字节和反向转换