关于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}
最后验证出来是正确的!
郁闷啊,这样一个小问题都把我搞得要死,唉……

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

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9482 0
将String 转换为byte[]数组
string aa = "你好欢迎你来到博客园";byte[] byteArry = new byte[0];byteArry = System.Text.Encoding.Default.
501 0
SSIS中的容器和数据流—数据转换(Transformations)
对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤。例如想要得到聚合排序后的运算结果,转换可以实现这种操作。和SQL Server 2000 DTS完全不同,这些操作不需要编写script,所有的运算都在内存中进行。
704 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10841 0
SSIS中的容器和数据流—数据转换(Transformations)续
在上一篇随笔中列举了部分Data Flow中的数据转换任务,这里继续剩余的转换任务。   数据挖掘请求 数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法。数据挖掘请求运行数据挖掘请求,并将结果输出到数据流。
709 0
SSIS高级转换任务—在Package中是用临时表是需要设置RetainSameConnection属性
在上一个导入列这个例子中我们创建一个实际的表来存储文件路径,在生产环境中我们可能不会创建一个实际的物理表来存储这些信息,而是创建临时表。这里有一个小小的技巧,在Control Flow中拖放两个Execute SQL task,一个创建临时表,另一个销毁临时表,执行这个package,会遇到一个错误,在Progress中提示信息显示不存在这个临时表。
654 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13165 0
python把str转换为int
1 def str2int(s): 2 def fn(x,y): 3 return x+y 4 def char2num(s): 5 return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7'...
773 0
+关注
杨粼波
网游的老兵
1135
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载