istringstream to int8_t产生意外结果

时间:2014-03-02 12:29:57

标签: c++ string templates istringstream

阅读此FAQ后,我选择使用istringstream将输入字符串转换为数值。

我的代码如下所示:

<template T>
T Operand<T>::getValue(const std::string &s)
{
    T _value;
    std::istringstream v_ss(s);

    v_ss >> _value;
    return _value;
}

当T为int,short,long或float时,没问题我得到正确的值。 但是当T为int8_t时,此代码不起作用。

例如,如果我的输入字符串是“10”,则getValue返回一个值为49的int8_t。

在ASCII表格中有49 =='1',我想&gt;&gt; operator只读取输入字符串中的第一个char并停止。

在常见问题解答中是否有一些我不理解的技巧?

1 个答案:

答案 0 :(得分:2)

问题是int8_t已实施为char

输入流的实现如下:

char x;
std::string inputString = "abc";
std::istringstream is(inputString);

is >> x;
std::cout << x;

结果是'a',因为对于char,输入流是char char char。

要解决此问题,请为模板方法提供专门的实现。并阅读int,然后检查边界并将值转换为int8_t