CString 和 cout 和 string

CString 和 cout

MFC里面直接使用CString比较方便,不过并不能直接由cout输出。看下面代码,在VC6和VC2010中输出是不同的。

#include <afx.h>
#include <iostream>
using namespace std;

void main()
{

CString s1="1234567890";
cout<<s1;

}

cout<<s1;

改为

cout<<s1.GetBuffer(0); //MFC4.2中的,高版本增加GetString()

或者

cout<<LPCTSTR(s1);

就可以输出正确的字符串内容,原理是获取字符串的首地址指针。

CString 和 string

由此可以引申出cstring类型转化为string类型方法:

#include <afx.h>
#include <iostream>
#include <STRING>
using namespace std;

void main()
{
	string s0="0987654321",s3="",s4="";
	CString s1="1234567890";

	s1=s0.c_str(); //string类型转换为cstring类型
	s3=LPCTSTR(s1); // 注 *
	s4=s1.GetBuffer(0); //cstring类型转换为string类型

	cout<<s0<<endl;
	cout<<LPCTSTR(s1)<<endl;
	cout<<s3<<endl;
	cout<<s4<<endl;

}

* 关于 LPCTSTR

You can freely substitute CString objects for const char* and LPCTSTR function arguments
LPCTSTR   A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.
LPTSTR      A 32-bit pointer to a character string that is portable for Unicode and DBCS.

扩展阅读

关键字:cstring, string, cout, 指针, LPCTSTR

二进制文件的XML存储方式

XML作为一种跨设备的数据传输方式,无疑在当今很流行。通常用来传输的数据除了常规的数值、字符串,剩下的还有一些二进制数据,例如图像等。

XML对二进制数据的处理,通常有两种常用方法:

  1. 将二进制数据转化为十六进制ASCII的明文方法,这样体积增大1倍。
  2. 将二进制数据经过BASE64编码的明文方法,这样体积增大1/3

对二进制的编码,其实我们早已在使用,比如发送电子邮件时的附件。电子邮件协议用的是明文传输协议,所以需要将附件文件进行MIME编码,同样的工作方式是将二进制数据转化为明文传输。

扩展阅读

关键字:XML, BASE64, HEX ASCII