天天看点

关于String 转换到 unsigned short

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

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

开始尝试了使用标准库istringstream和ostringstream来解决,也就是:

关于String 转换到 unsigned short

 std::istringstream  str(strPort); 

关于String 转换到 unsigned short

 unsigned short nPort;

关于String 转换到 unsigned short

 str<<strPort; 

关于String 转换到 unsigned short

 str>>nPort; 

但是很遗憾,转换的数值是错误的。

后来看到了可以用:

关于String 转换到 unsigned short

nPort = (char*)strPort.c_str();

转换到 char*,我就类似的使用了:

关于String 转换到 unsigned short

nPort = (unsigned short)strPort.c_str();

结果数值还是错误的!

后来我查了一下CPPReference:

关于String 转换到 unsigned short

c_str 

关于String 转换到 unsigned short

Syntax: 

关于String 转换到 unsigned short

  #include <string>

关于String 转换到 unsigned short

  const char* c_str();

关于String 转换到 unsigned short
关于String 转换到 unsigned short

The function c_str() returns a const pointer to a regular C string, identical to the current string. The returned string is null-terminated.

关于String 转换到 unsigned short
关于String 转换到 unsigned short

Note that since the returned pointer is of type (C/C++ Keywords) const, the character data that c_str() returns cannot be modified.

关于String 转换到 unsigned short

这才知道,原来c_str 只能够返回const char*,

没有办法,我查询还有没有别的转换的方法,很遗憾,都没有。

最后我是采用这个办法解决的:

关于String 转换到 unsigned short

    nPort = atoi((char*)strPort.c_str()); 

我写了一个测试用的小东西:

关于String 转换到 unsigned short

#include <iostream>

关于String 转换到 unsigned short

//#include <sstream.h>

关于String 转换到 unsigned short

#include <string>

关于String 转换到 unsigned short

//#include <winsock2.h>

关于String 转换到 unsigned short
关于String 转换到 unsigned short

using namespace std;

关于String 转换到 unsigned short
关于String 转换到 unsigned short
关于String 转换到 unsigned short

void test()

关于String 转换到 unsigned short

{

关于String 转换到 unsigned short

//ostringstream oss;

关于String 转换到 unsigned short

//oss.str("abc");

关于String 转换到 unsigned short

string strIP = "127.0.0.1"; 

关于String 转换到 unsigned short

string strPort = "2000";

关于String 转换到 unsigned short
关于String 转换到 unsigned short

    char* szRemoteAddr = "";

关于String 转换到 unsigned short

    unsigned short nPort ;

关于String 转换到 unsigned short
关于String 转换到 unsigned short
关于String 转换到 unsigned short

szRemoteAddr = (char*)strIP.c_str();

关于String 转换到 unsigned short

//nPort = atoi((char*)strPort.c_str());

关于String 转换到 unsigned short

nPort = atoi((char*)strPort.c_str());

关于String 转换到 unsigned short
关于String 转换到 unsigned short
关于String 转换到 unsigned short

//cout<<strIP<<endl;

关于String 转换到 unsigned short

//cout<<szRemoteAddr<<endl;

关于String 转换到 unsigned short

cout << "This is old one:" << strPort << endl;

关于String 转换到 unsigned short

cout << "This is new one:" << nPort << endl;

关于String 转换到 unsigned short
关于String 转换到 unsigned short
关于String 转换到 unsigned short

}

关于String 转换到 unsigned short
关于String 转换到 unsigned short

int main(int argc, char* argv[])

关于String 转换到 unsigned short

关于String 转换到 unsigned short

test();

关于String 转换到 unsigned short

return 0;

关于String 转换到 unsigned short

最后验证出来是正确的!

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

继续阅读