wince中写中文log文件

项目中用到的,起先log会有一串小方框,后来发现是写入的长度并不是实际转化后的长度,备忘。

自定义函数MyWideCharToMultiByte,功能:将含有中文的宽字符数组转化为多字节字符数组,返回转化后的实际字符个数


int CFuncDlg::MyWideCharToMultiByte_test(WCHAR* wchars,CHAR* schars,int scharsLen)
{
	memset(schars,0,scharsLen);
	CString m_snd = wchars;
	int len = m_snd.GetLength();
	CString tmpstr(m_snd); //复制要发送的字符串
	int multibytelen=WideCharToMultiByte( //计算从Unicode转换到Ansi后需要的字节数
		CP_ACP, //根据ANSI code page转换
		WC_COMPOSITECHECK | WC_DEFAULTCHAR, //转换出错用缺省字符代替
		(LPCWSTR)tmpstr.GetBuffer(len), //要转换的字符串地址
		len, //要转换的个数
		0, //转换后字符串放置的地址
		0, //最多转换字符的个数,为0表示返回转换Unicode后需要多少个字节
		0, //缺省的字符:"\0"
		0 //缺省的设置
		);
	WideCharToMultiByte( //转换Unicode到Ansi
		CP_ACP,
		WC_COMPOSITECHECK | WC_DEFAULTCHAR,
		(LPCWSTR)tmpstr.GetBuffer(len),
		len,
		(char *)schars, //转换到缓冲区中
		scharsLen, //最多个字节
		0,
		0
		);
	return multibytelen;
 }

写log函数writeResult,输入CString

int CFuncDlg::writeResult(CString result){

	CFile myFile;
	char *pData = new char[100];
	TCHAR *pStrLog = new TCHAR[100];
	CString strFile;

	strFile.Format(_T("\\ResidentFlash\\CFuncDlglog.txt")); 
	SYSTEMTIME sys;       
	GetLocalTime( &sys );  
	CTime t1(sys);
	CString str = _T("");
	str.Format(_T("%4d/%02d/%02d %02d:%02d:%02d\r\n")+result, sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond);
		

	int fileLength =  str.GetLength();			
	wcscpy(pStrLog,(LPCTSTR) str);
	int cpylen =MyWideCharToMultiByte_test(pStrLog,pData,fileLength*2);

	myFile.Open(strFile, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
	myFile.SeekToEnd();
	myFile.Write(pData,cpylen);
	myFile.Flush();
	myFile.Close();
	delete[] pData;	
	delete[] pStrLog;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值