关于String 转换到 unsigned short-阿里云开发者社区

开发者社区> 杨粼波> 正文

关于String 转换到 unsigned short

简介: 这才知道,原来c_str 只能够返回const char*,没有办法,我查询还有没有别的转换的方法,很遗憾,都没有。
+关注继续查看
最近被一个小问题给弄晕呼了,没有办法人太笨了,基础又不好……

我最近要把一个String的数值转换为 unsigned short int类型,Socket里面的sockaddr_in的sin_port使的就这。

开始尝试了使用标准库istringstream和ostringstream来解决,也就是:
None.gif std::istringstream  str(strPort); 
None.gif unsigned short nPort;
None.gif str<<strPort; 
None.gif str>>nPort; 
但是很遗憾,转换的数值是错误的。
后来看到了可以用:
None.gifnPort = (char*)strPort.c_str();
转换到 char*,我就类似的使用了:
None.gifnPort = (unsigned short)strPort.c_str();
结果数值还是错误的!

后来我查了一下CPPReference:
None.gifc_str 
None.gifSyntax: 
None.gif  #include <string>
None.gif  const char* c_str();
None.gif
None.gifThe function c_str() returns a const pointer to a regular C string, identical to the current string. The returned string is null-terminated.
None.gif
None.gifNote that since the returned pointer is of type (C/C++ Keywords) const, the character data that c_str() returns cannot be modified.
None.gif
原文地址:http://www.cppreference.com/cppstring/c_str.html

这才知道,原来c_str 只能够返回const char*,
没有办法,我查询还有没有别的转换的方法,很遗憾,都没有。
最后我是采用这个办法解决的:
None.gif    nPort = atoi((char*)strPort.c_str()); 

我写了一个测试用的小东西:
None.gif#include <iostream>
None.gif//#include <sstream.h>
None.gif
#include <string>
None.gif//#include <winsock2.h>
None.gif

None.gifusing namespace std;
None.gif
None.gif
None.gifvoid test()
ExpandedBlockStart.gif{
InBlock.gif//ostringstream oss;
InBlock.gif
//oss.str("abc");
InBlock.gif
string strIP = "127.0.0.1"; 
InBlock.gifstring strPort = "2000";
InBlock.gif
InBlock.gif    char* szRemoteAddr = "";
InBlock.gif    unsigned short nPort ;
InBlock.gif
InBlock.gif
InBlock.gifszRemoteAddr = (char*)strIP.c_str();
InBlock.gif//nPort = atoi((char*)strPort.c_str());
InBlock.gif
nPort = atoi((char*)strPort.c_str());
InBlock.gif
InBlock.gif
InBlock.gif//cout<<strIP<<endl;
InBlock.gif
//cout<<szRemoteAddr<<endl;
InBlock.gif
cout << "This is old one:" << strPort << endl;
InBlock.gifcout << "This is new one:" << nPort << endl;
InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gifint main(int argc, char* argv[])
ExpandedBlockStart.gif
InBlock.giftest();
InBlock.gifreturn 0;
ExpandedBlockEnd.gif}
最后验证出来是正确的!
郁闷啊,这样一个小问题都把我搞得要死,唉……

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C++中int 转换成 string类型
要是换在C#或Java,各种数据类型随便转换,有各种函数随便挑。但是在C++中还真没有那么简单。 我本来是希望能够将123,这样的int类型转换的“123”这样的string,或者C-style也可以。
983 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
4133 0
SSIS中的容器和数据流—数据转换(Transformations)
对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤。例如想要得到聚合排序后的运算结果,转换可以实现这种操作。和SQL Server 2000 DTS完全不同,这些操作不需要编写script,所有的运算都在内存中进行。
688 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4587 0
SSIS中的容器和数据流—数据转换(Transformations)续
在上一篇随笔中列举了部分Data Flow中的数据转换任务,这里继续剩余的转换任务。   数据挖掘请求 数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法。数据挖掘请求运行数据挖掘请求,并将结果输出到数据流。
692 0
错误 不存在从 “std::string“ 到 “LPCSTR“ 的适当转换函数
错误 不存在从 “std::string“ 到 “LPCSTR“ 的适当转换函数
9 0
关于Java中bytes到String的转换
本片文章主要介绍在Java中byte array到String转换的细节,特别是在处理非utf-8字节流转换到String时容易踩到的一些坑。
6892 0
+关注
杨粼波
网游的老兵
1135
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载