关于TCHAR* argv[] 转 char **的办法

饭团呀饭团 2014-06-06 12:33:21
如何将TCHAR* argv[] 转 char **呢?
我转出来的是乱码- -
用的是unicode,可是用到的一个库初始化需要的是ansi的。
...全文
255 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2014-06-06
  • 打赏
  • 举报
回复
string stlUnicodeToAscii( LPCWSTR strW )
{
	char*     pElementText = NULL;
	int    iTextLen = 0;
	// wide char to multi char
	iTextLen = WideCharToMultiByte( CP_ACP,
		0,
		strW,
		-1,
		NULL,
		0,
		NULL,
		NULL );
	if(iTextLen < MAX_CONVER_LEN)
	{
		pElementText = (char*)_alloca(iTextLen+1);
	}
	else
	{
		pElementText = new char[iTextLen+1];
	}

	memset( ( void* )pElementText, 0, sizeof( char ) * ( iTextLen + 1 ) );
	::WideCharToMultiByte( CP_ACP,
		0,
		strW,
		-1,
		pElementText,
		iTextLen,
		NULL,
		NULL );
	if(iTextLen < MAX_CONVER_LEN)
	{
		return string(pElementText);
	}
	else
	{
		string tStr(pElementText);
		delete [] pElementText;
		return tStr;
	}

}
CStringA	UnicodeToMbcs(LPCWSTR pUnicode)
{
	if (pUnicode==NULL)
		return "";

	int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
	UINT nLength=wcslen(pUnicode);
	int nChar = WideCharToMultiByte(codepage, 0, pUnicode, nLength, 0, 0, 0, 0);

	CStringA tempBuffer;

	nChar = WideCharToMultiByte(codepage, 0, pUnicode, nLength, tempBuffer.GetBufferSetLength(nChar), nChar, 0, 0);
	if( nChar == 0 )
	{
		return "";
	}
	tempBuffer.ReleaseBuffer();

	return tempBuffer;
}
unituniverse2 2014-06-06
  • 打赏
  • 举报
回复
引用 楼主 s306150918 的回复:
如何将TCHAR* argv[] 转 char **呢? 我转出来的是乱码- - 用的是unicode,可是用到的一个库初始化需要的是ansi的。

char szMbcsOut[10];
TCHAR szTszIn[] = _T("Hi!");

sprintf_s(szMbcsOut, sizeof(TCHAR) == 1 ? "%s" : "%S", szTszIn);
sprintf_s(szMbcsOut, sizeof(TCHAR) == 1 ? "%s" : "%S", _T("Hi!"));
buyong 2014-06-06
  • 打赏
  • 举报
回复
iconv library

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧