博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于String 转换到 unsigned short
阅读量:6496 次
发布时间:2019-06-24

本文共 1466 字,大约阅读时间需要 4 分钟。

最近被一个小问题给弄晕呼了,没有办法人太笨了,基础又不好……


我最近要把一个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
原文地址:


这才知道,原来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.gif
using 
namespace std;
None.gif
None.gif
None.gif
void test()
ExpandedBlockStart.gif {
InBlock.gif
//
ostringstream oss;
InBlock.gif
//
oss.str("abc");
InBlock.gif
string strIP = "127.0.0.1"; 
InBlock.gif
string 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.gif
int main(
int argc, 
char* argv[])
ExpandedBlockStart.gif
InBlock.giftest();
InBlock.gif
return 0;
ExpandedBlockEnd.gif}
最后验证出来是正确的!

郁闷啊,这样一个小问题都把我搞得要死,唉……

转载地址:http://ujyyo.baihongyu.com/

你可能感兴趣的文章
使用PostgreSQL 9.6 架设mediawiki服务器
查看>>
数据库服务器硬件对性能的影响
查看>>
LVM
查看>>
windows+群辉服务器环境下,搭建git版本管理
查看>>
Boolean类型
查看>>
Ubuntu 修改源
查看>>
php 几个比较实用的函数
查看>>
(译)OpenGL ES2.0 – Iphone开发指引
查看>>
@RestController 与 @RequestMapping
查看>>
黑马程序员.bobo.DAY.1
查看>>
Unity shader 官网文档全方位学习(二)
查看>>
pbrun
查看>>
Java后端工程师学习大纲
查看>>
浏览器加载和渲染网页顺序
查看>>
微服务架构springcloud
查看>>
深入剖析Android系统试读样章
查看>>
测试用例出错重跑--flaky插件
查看>>
yaf的安装
查看>>
比较java与C++的不同
查看>>
Twitter Storm入门
查看>>