CString a;
a+="你们好";
如何将a中的每个中文字转换成UNICODE编码,要一个个转换出来。
a+="你们好";
如何将a中的每个中文字转换成UNICODE编码,要一个个转换出来。
解决方案 »
- 一个关于ATL Connection Point机制中COM接口类型转换的问题
- 求助:请各位大哥帮我看看这个问题(串口接收数据),谢谢!
- radiobutton
- 我用ATL做一个控件,可以嵌入在word里面,请问在ATl里面如何持久化数据?给出点示例代码,100分,谢谢!
- 寻求产生密码的算法
- 请问dtd是否适合于支持递归定义
- 无从着手,希望大虾能够解决!!!!
- 在调用CSocket 的Create方法时候,为什么总是返回FALSE??
- 怎么我不能挂接API
- 如何通过一个进程内的一个内存地址,来的到它的对应进程?
- 关于调用OnAmbientPropertyChanged的问题
- VC++中怎样调用Delphi写的Dll?
wchar_t *pwText;
pwText = new wchar_t[dwNum];
MultiByteToWideChar(CP_ACP,0,a,-1,pwText,dwNum);
{
CString retstr;
char aa[500]="";
int len=msg.GetLength();
BSTR x=msg. AllocSysString();
long num=*((long*)x-1);
for(int i=0;i<num;i+=1)
{
if(i>=len)
break;
char cc[10]="";
if((*x>>8)==0)
{
sprintf(aa,"%s00%x",aa,*x);
msg=msg.Right (msg.GetLength ()-1);
}
else
{
sprintf(aa,"%s%x",aa,*x);
msg=msg.Right (msg.GetLength ()-2);
i=i+1;
}
SysFreeString(x);
x=msg. AllocSysString();
}
SysFreeString(x);
char bb[10]="";
int len1=strlen(aa);
char txt[500]="";
if(len1%4!=0)
{
memcpy(txt,aa,(len1-3)); }
else
{
memcpy(txt,aa,len1);
}
if(num<=0x0f)
{
sprintf(bb,"0%x",num);
}
else
{
sprintf(bb,"%x",num);
}
retstr.Format ("%s%s",bb,txt);
retstr.MakeUpper ();
int msglth=retstr.GetLength();
return retstr;
}
那么你直接把cstring转换为byte[] 就是你要的unicode的编码无论你的字符串存在哪 源文件也好 txt也要 只要文件编码是unicode 那么转出来就是unicode如果保存字符串的文件不是unicode 自己找找第三方lib去转
CString StrOut = "";
int length = a.GetLength();
for(int i = 0 ; i < length; i++)
{
CString str = StrIn.Mid(i,1);
unsigned char temp;
strcpy((char*)&temp,str);
if(temp>=128) //汉字特征
{
CString strchar = StrIn.Mid(i,2);
unsigned short Hex;
char buffer[4];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,strchar,3,&Hex,1);
sprintf(buffer,"%x",Hex);
StrOut += buffer;
StrOut += " ";
i++;
}
else
{
char buffer[2];
itoa(temp,buffer,16);
// StrOut += "00";
StrOut += buffer;
StrOut += " ";
}
}输入a = "abc你们好"
strOut = "61 62 63 4f60 4eec 597d";
发现只要a.GetBuffer()[i],就可以把所有的转换成UNICODE编码。
但是还有一个小问题
wchar_t a='我';
这个可以定义,但是输出的时候不对?能帮下忙吗?
{
int nDstLen = 0;
int nTotal = 0;
WCHAR *wchr;
try
{
nDstLen = ::MultiByteToWideChar( CP_ACP, 0, pSrc, nSrcLength, NULL, 0 );
wchr = new WCHAR[ nDstLen + 0x10 ]; if( wchr )
{
nDstLen = ::MultiByteToWideChar( CP_ACP, 0, pSrc, nSrcLength, wchr, nDstLen );
if( nDstLen > 0 )
{
for(int i = 0; i < nDstLen ; i++ )
{
//È¡¸ßλ·ÅÔÚµÚÒ»¸öBYTE
*(pDst++) = HIBYTE( wchr[ i ] );
//È¡µÍλ·ÅÔÚÏÂÒ»¸öBYTE
*(pDst++) = LOBYTE( wchr[ i ] );
}
delete []wchr;
}
else
{
return -1;
}
}
else
{
nDstLen = 0;
}
nTotal = ( nDstLen << 1 );
}
catch( ... )
{
return -1;
}
return nTotal;
}
请问逆过来怎么转,就是将BYTE * 转为char *