LPTSTR LPSTR LPWSTR LPCTSTR LPCSTR LPCWSTR LPBYTE

本文介绍在C++中如何处理Unicode与Ansi环境下的字符串转换问题,包括CString到LPSTR、LPCTSTR到LPBYTE及LPCTSTR到LPSTR的转换方法。针对不同情况提供了详细的代码示例。

大家可以看下这个人的:

http://blog.youkuaiyun.com/jize00/article/details/4379478


LPTSTR: LPSTR/LPWSTR    二选一  ,Ansi/Unicode环境决定

  (char *)/(wchar_t *)

LPCTSTR:LPCSTR/LPCWSTR  二选一,Ansi/Unicode环境决定

(const char*)/(const w_char*)

LPBYTE: (unsigned char*)


//////////////////////////////////////////////////////////////////////////////////////////////////////////////

LPSTR:即char*,也就是char c_arr[256];   这种形式,代码中可以用char数组进行操作

LPWSTR:即wchar_t*,也就是WCHAR wc_arr[256];  代码中可以用wchar数组对齐赋值


/////////////////////////////////////////////////////////////////////////////////////////////////////////////


/********************************************************************************/

//程序为Unicode环境

//我遇到的几种类型转换

/*******************************************************************************/

1.CString ------> LPSTR



CStringm_LogicalService=_T("aaaaaa");

charm_szLogicalService[256];

memset(m_szLogicalService, 0, sizeof(m_szLogicalService));


#ifdef _UNICODE
	size_t sizeConverted = 0;
	wcstombs_s(&sizeConverted, m_szLogicalService, 250, (LPCTSTR)m_LogicalService, m_LogicalService.GetLength());
#else
	strcpy(m_szLogicalService, (LPCSTR)m_LogicalService);
#endif // _UNICODE


2.LPCTSTR------->LPBYTE, 输入参数是LPCTSTR,所需要转换成LPBYTE


LONG CPrinterBTT080Ctrl::PrinterPrintText(LPCTSTR strText, LONG type)
{


#ifdef _UNICODE
	int nLen = _tcsclen(strText);
	//LPBYTE m_lpbyte = new BYTE[2*nLen+1];//因为可能存在中文字的情况,所以*2,怕所有的都是中文所以+1
	LPBYTE m_lpbyte = new BYTE[2*nLen+20];//20长度用于位置10|10

	WideCharToMultiByte(CP_ACP,0,strText,_tcsclen(strText)*sizeof(TCHAR),(LPSTR)m_lpbyte,2*nLen+1,NULL,NULL);
	//m_lpbyte[2*nLen+1] = '\0';
#else
	CString str = strText;
	int n = str.GetLength();
	LPBYTE m_lpbyte = new BYTE[n+1];
	for(int i=0;i<n+1;i++)
	{
		m_lpbyte[i] = str[i];
	}
	m_lpbyte[n]='\0';

#endif // _UNICODE

	

	LPBYTE lpbDate = m_lpbyte;
	delete [] m_lpbyte;


...//省略我的其他代码 
delete [] m_lpbyte;
}

3.LPCTSTR-------------->LPSTR,

LONG CPrinterBTT080Ctrl::PrinterPrintForm(LPCTSTR strFormName, LPCTSTR strData, LONG type)
{



	char m_szStrFormName[512];
	memset(m_szStrFormName,0x00,sizeof(m_szStrFormName));

	int nLen = _tcsclen(strData);
	LPSTR m_szStrData = new char[2*nLen+1];//因为可能存在中文字的情况,所以*2,怕所有的都是中文所以+1
	memset(m_szStrData,0x00,sizeof(m_szStrData));
#ifdef _UNICODE
	WideCharToMultiByte(CP_ACP,0,strData,_tcsclen(strData)*sizeof(TCHAR),(LPSTR)m_szStrData,2*nLen+1,NULL,NULL);
	WideCharToMultiByte(CP_ACP,0,strFormName,_tcsclen(strFormName)*sizeof(TCHAR),m_szStrFormName,512,NULL,NULL);
#else
	//strcpy(m_szStrData, strData);
	m_szStrData = strData;
	strcpy(m_szStrFormName,strFormName);
#endif // _UNICODE

	

	LPSTR lpszFormName	= m_szStrFormName;
	LPSTR lpszFields = m_szStrData;

	...//
	
delete [] m_szStrData;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值