CString与char*数据类型转换 在MFC中(以后还会更新,仅做笔记)

这类简单的东西,有时候不用就容易忘,每次用的时候都要搜一下,我自己记录下确认的一种方法吧

1 CString转化成char*

分两种情况,一种在ANSI字集,另一种是在Unicode字集

CString cstrPP=L"I am a boy!";

第一种在ANSI字集

char* p;

p=(char*)cstrPP.GetBuffer(cstrPP.GetLength());

另一种在Unicode字集

wchar_t 是unicode 类型,是宽字节

wchar_t* p;

p=(wchar_t*)cstrPP.GetBuffer(cstrPP.GetLength());

在用完GetBuffer()之后一定要用ReleaseBuffer()


2 char*转化成CString

char str[20]="GO GO!";

CString cstr;

cstr.Format("%s",str);



3将主机字节顺序转化为网络字节

htonl()表示将32位的主机字节顺序转化为32位的网络字节顺序 htons()表示将16位的主机字节顺序转化为16位的网络字节顺序(ip地址是32位的端口号是16位的 )


4将网络字节顺序转化成主机字节顺序

ntohs ntohl

从3和4可以看出 h代表host,n代表network,l代表long,s代表short



5IP地址格式转换(char*与struct in_addrin格式互换)
unsigned long PASCAL FAR inet_addr (const char FAR * cp);
char FAR * PASCAL FAR inet_ntoa (struct in_addr in);
inet_addr函数需要一个字符串作为其参数,该字符串指定了以点分十进制格式表示的IP地址(例如:192.168.0.16)。而且inet_addr函数会返回一个适合分配给S_addr的u_long类型的数值。
Inet_ntoa函数会完成相反的转换,它接受一个in_addr结构体类型的参数并返回一个以点分十进制格式表示的IP地址字符串。


6宽字符与多字节的转换(参考http://blog.csdn.net/xiaobai1593/article/details/7063535

第一种方法是

mbstowcs()把多字节字符转换成宽字符

wcstombs()把宽字符转换成多字节  wide character to multibyte

第二种方法是

MultiByteToWideChar用于将多字节字符串转换成宽字符串
WideCharToMultiByte将宽字符串转换成等价的多字节字符串

两种函数同样有效


7现在有些默认的字集是Unicode编译器,比如说VS2005,在wince 6.0也是Unicode的字集,所以说要学会用Unicode字集的一些函数,这边就不细讲了,就附上一个链接http://blog.csdn.net/ccbuluo/article/details/8705667

CString也是宽字符吧,在有些环境当中


8Unicode下CString 转换成char*

先附上一个链接http://www.cnblogs.com/junyuz/archive/2011/08/24/2151857.html,这些方法我没有去试

我再补充一个自己能用的方法

CString cstr=L"I am best";

wchar_t* wstr=cstr.GetBuffer(cstr.GetLength());

char* ch=new char[cstr.GetLength())];

wcstombs(ch,wstr,cstr.GetLength());

ch[cstr.GetLength())]='\0';



用完要delete []ch;这个要养成好习惯




在这里补充一下字符的的概念,有关多字节、宽字符、unicode等概念

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一冰倩唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

UTF-8以变长的方式编码的,它可以使用1到4个字节表示一个字符,根据不同的符号变化用不同的字节表示。http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html这篇讲的通俗易懂

UTF-16和UTF-32分别以16位无符号整数、32位无符号整数位单位的。

还有关于网络字节顺序和主机字节顺序,大端和小端,可以上网搜一下,可以了解下

多字节是每个字符的编码宽度都不等,可以是一个字节,也可以是多个字节

宽字符,与多字节相反,所有的字符的字节数都相等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值