请教在C++里如何把string类型转换成long型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教在C++里如何把string类型转换成long型?相关的知识,希望对你有一定的参考价值。

不要依赖VC的库比如atoi?
可有什么好方法?

首先,atoi并不是vc的库,是标准c的一个库函数
在c++中如果不采用这个函数的话,可以使用stringstream来转换,如下:
#include <sstream>
std::string str("123");
long num;
std::stringstream sstr;
sstr<<str;
sstr>>num;
sstr.clear();//下次转换之前必须调用这个
如果你使用boost库的话,会更简单一点:
#include <boost/lexical_cast.hpp>
string str("123");
long num=boost::lexical_cast<long>(str);
当然boost内部实现也是采用stringstream的方式转换的
参考技术A 自己写了.
long atoi(char *pch,int len)

long ret=0;
for(int i=0;i<len;i++)

if(pch[i]>='0'&&pch[i]<='9')

ret*=10;
ret+=(pch[i]-'0');

else

//此处是出错处理,给的字符中有非数字的字符.
break;

return ret;

参考技术B 可以直接调用c库函数atol() 参考技术C atol真的很好用哈!建议使用!

c++中一个long类型数据转换成IP地址

C++中,反过来,如果要把一个这种运算完以后的二进制数字直接生成一个IP地址的字符串的话,可以用下面这个函数。
inet_ntoa()将网络二进制的数字转换成网络地址
相关函数 inet_addr,inet_aton
表头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
定义函数 char * inet_ntoa(struct in_addr in);
函数说明 inet_ntoa()用来将参数in所指的网络二进制的数字转换成网络地址,然后将指向此网络地址字符串的指针返回。
返回值 成功则返回字符串指针,失败则返回NULL。
结构in_addr定义如下
struct in_addr

unsigned long int s_addr;
;
4) 代码例子:
unsigned long int ip = inet_addr(ipString.c_str());
in_addr subnetIp;
subnetIp.s_addr = ip &Mask;
subnetIpAddr = inet_ntoa(subnetIp);
5) 说明:
参考技术A 声明一个联合体 union unsigned char b[4]; long l; ;
把long塞进去,把四个byte取出来,ok。
注意网络地址字节顺序和主机地址字节顺序:前者是big-endian,后者在普通的个人计算机上是little-endian。
比如127.0.0.1 是 0x0100007f, 存入l后,b的值是 127, 0, 0, 1追问

c++中使用WINSOCK控件,调用Accept(ID);ID 是long类型的,如果它是代表IP地址,那如何用代码转换成IP地址?

追答

啊?控件?我不用MFC,平时直接调用api的,不晓得什么控件……
api里面没见过ID这东西,它自己封装以后抽象出来的什么东西吧

以上是关于请教在C++里如何把string类型转换成long型?的主要内容,如果未能解决你的问题,请参考以下文章

c++中一个long类型数据转换成IP地址

如何把一个long型转换成日期

JAVA怎么把long型转为String的

C++ string如何转换为BSTR类型

c++ 如何将string类型的二进制转换为16进制?

C# List<long> 如何转换成 List<string> ?(求高手支招)