我从C++中的数据文件中获得了一些信息。一个信息是一个12个字符的长号码。我怎么能把这个从字符串转换为long long(我认为long long最适合这个)而没有数据丢失?将一个ASCII字符串转换为long long
1
A
回答
5
在C++中,没有long long
数据类型。 It's available in C99。但是,您可以使用int64_t
。包括<stdint.h>
。使用将字符串转换为int64_t
。
或者你可以写一个转换函数自己是:
int64_t convert(const std::string &s)
{
if(s.size() == 0)
std::runtime_error error("invalid argument");
int64_t v = 0;
size_t i=0;
char sign = (s[0] == '-' || s[0] == '+') ? (++i, s[0]) : '+';
for(; i < s.size(); ++i)
{
if (s[i] < '0' || s[i] > '9')
throw std::runtime_error("invalid argument");
v = v * 10 + s[i] - '0';
}
return sign == '-' ? -v : v;
}
测试代码:
int main() {
try{
std::cout << convert("68768768") << std::endl;
std::cout << convert("+68768768") << std::endl;
std::cout << convert("-68768768") << std::endl;
std::cout << convert("68768768x") << std::endl;
}catch(const std::exception &e)
{
std::cout << e.what() << std::endl;
}
return 0;
}
输出:
68768768
68768768
-68768768
invalid argument
0
一个64位的位整数足以表示任何12位十进制数(有足够的空间可用)。因此,根据您的平台,可能会有一个long
就足够了。如果是这种情况,您可以使用strtol
或strtoul
。
如果您确实需要long long
,请查看strtoll
和strtoull
。
相关问题
- 1. 将字符串转换为long long值
- 2. 将字符串转换为long long C?
- 3. 将字符串转换为long long
- 4. 将字符串转换为long long int
- 5. 将字符串转换为无符号long long int C
- 6. 如何将字符串转换为long
- 7. Android - 将字符串转换为long值
- 8. 将字符串转换为long triggerAtMilli
- 9. 如何将字符串转换为long?
- 10. 将long long转换为C中的字符串?
- 11. 如何将字符串转换为long long
- 12. 将int转换为无符号long long
- 13. Java long不能转换为字符串
- 14. 类型转换为无符号long long?
- 15. 从int转换为long long
- 16. 将RDD [Long,String,Long]转换为sql.DataFrame
- 17. 在字符串C++中转换Long?
- 18. Spark:将RDD [(Long,Array [Double])]转换为RDD [(Long,Long,Double)]
- 19. 将无符号long long转换为wchar_t *并连接
- 20. 类型转换为unsigned long long到字符指针用C
- 21. 将long double转换为CString
- 22. 将Lat/long转换为PointClass
- 23. 将int [2]转换为long
- 24. 将字符串从strftime转换为int/long
- 25. 在unix shell ksh中将日期字符串转换为long
- 26. 将变量值从字符串转换为Java中的long
- 27. 无法将类型'字符串'隐式转换为'long'
- 28. 将字符串转换为Long,没有内置库
- 29. 在excel宏中将字符串转换为long
- 30. 将unicode字符串转换为int或long
我要说那90%他会fi在他的平台上只有32位,除非他用GCC编译64位系统(或其他更特殊的编译器) – xanatos
也就是说,你可能会提到'strtol' /'strtoul'用于普通的longs。 。 –