在C ++中将字符串转换为short

时间:2015-02-13 03:42:42

标签: c++ string short

所以我一直在寻找如何将字符串转换为short并找到很多关于如何将字符串转换为整数的方法。我会留下一个问题作为对这些主题的评论,但我没有足够的声誉。所以,我想做的是将字符串转换为short,因为数字应该永远不会超过3或者低于零而且short会节省内存(据我所知)。

要清楚,我不是指ASCII码。

我希望能够做的另一件事是检查字符串到short的转换是否失败,因为我将使用一个由用户输入组成的字符串。

我知道我可以使用while循环执行此操作,但如果有一个内置函数在C ++中执行此操作,那将比while循环更有效,我很乐意听到它。< / p>

4 个答案:

答案 0 :(得分:12)

基本上,std::stos功能由于未知原因而丢失,但您可以轻松自行推送。使用std::stoi转换为int,根据例如short边界检查值。 std::numeric_limits<short>,如果std::range_error不在范围内,则抛出boost::lexical_cast,否则返回该值。那里。

如果你已经安装了Boost库,你可以使用boost::lexical_cast 来方便,但是否则我会避免它(主要是为了详细程度和库依赖,和它&# 39; s也有点低效)。

早些时候scanf因效率不高而闻名,我相信因为它内部基于字符串流,但正如评论中所报道的那样现代版本是faster than conversion via stringstream,并且就此问题而言{{3}} {1}}。

答案 1 :(得分:3)

efficient way将使用boost::lexical_cast

short myShort = boost::lexical_cast<short>(myString);

您需要安装boost library,其中包括:#include <boost/lexical_cast.hpp>

如果演员表失败,你应该抓住bad_lexical_cast

    try
    {
        short myShort = boost::lexical_cast<short>(myString);
    }
    catch(bad_lexical_cast &)
    {
        // Do something
    }

答案 2 :(得分:1)

您还可以将ssprintf%hi格式说明符一起使用。

示例:

short port;
char szPort[] = "80";

sscanf(szPort, "%hi", &port);

答案 3 :(得分:0)

  

该数字不应超过三或零以下

如果确实需要保存内存,那么这也适合char(无论char是有符号还是无符号)。

另一个极端&#39;诀窍:如果你可以相信没有像#34; 002&#34;那你拥有的是一个单字符串。如果是这种情况,并且真的非常需要性能,请尝试:

char result = (char)( *ptr_c_string - '0' );