我可以知道如何将std :: string转换为特定于MSVC的__int64?
答案 0 :(得分:5)
_atoi64, _atoi64_l, _wtoi64, _wtoi64_l
std::string str = "1234";
__int64 v =_atoi64(str.c_str());
另请参阅此链接(尽管适用于linux / unix):Why doesn't C++ reimplement C standard functions with C++ elements/style?
答案 1 :(得分:3)
这是一种方式:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string s( "1234567890987654321");
stringstream strm( s);
__int64 x;
strm >> x;
cout << x;
}
答案 2 :(得分:1)
__int64
虽然是扩展程序,但仍然只是一种数字类型。使用您通常使用的任何方法。
Boost lexical cast是我最喜欢的。它几乎以一种易于使用的形式包含了Michaels的答案:
__int64 x = boost::lexical_cast<__int64>("3473472936");
如果你不能使用boost,你仍然可以做一个简单的版本。这是我为另一个答案写的一个实现:
template <typename R>
const R lexical_cast(const std::string& s)
{
std::stringstream ss(s);
R result;
if ((ss >> result).fail() || !(ss >> std::ws).eof())
{
throw std::bad_cast();
}
return result;
}
它会执行一些额外操作,例如检查尾随字符。 ("123125asd"
会失败)。如果无法进行强制转换,则抛出bad_cast
。 (类似于提升。)
此外,如果您有权访问提升,则可以避免使用特定于MSVC的__int64
扩展名:
#include <boost/cstdint.hpp>
typedef boost::int64_t int64;
在提供它的任何平台上获取int64
,而无需更改代码。