【发布时间】:2013-03-18 14:09:36
【问题描述】:
我正在尝试将字符串转换为boost::uint64_t,pvalue 的内容是12345678901234567890。我现在使用的代码是:
void setAttribute(EnumAttrTyoe pname, const void *pvalue) {
if (pname == SESS_ID) {
const char *raw_sess_id = reinterpret_cast<const char*>(pvalue);
std::string str_sess_id(raw_sess_id);
std::cout << "Trying to open session id: '" << str_sess_id << "'\n";
m_session_id = boost::lexical_cast<unsigned long long>(str_sess_id);
}
}
这会引发异常,并显示消息“错误的词法转换:源类型值无法解释为目标”。如果改为使用此代码:
void setAttribute(EnumAttrTyoe pname, const void *pvalue) {
if (pname == SESS_ID) {
const char *raw_sess_id = reinterpret_cast<const char*>(pvalue);
std::string str_sess_id(raw_sess_id);
std::stringstream ss;
ss << raw_sess_id;
ss >> m_session_id;
}
}
它通过了,但m_session_id 的值为0。我还没有检查ss 的标志,但我不需要很聪明就知道它失败了。有什么想法现在该怎么做?
更新没有 C++11,因为我不能使用它,而且我的编译器是 VC++ 2008,boost 版本 1.43.0。
【问题讨论】:
-
您使用的是什么编译器和 boost 版本?
-
boost 为 1.43.0,编译器 MS VC++ 2008