怎样把BYTE数组,转换为UNICODE的CString?

fxismonk 2004-12-22 10:33:34
已知BYTE类型的数组,怎样把他转换为UNicode的CString类型呢?
也用MultiByteToWideChar吗?怎么用呢?
谁能给个例子?
得到答案马上就结帖,请大家多多帮忙,bow~
...全文
934 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2004-12-22
  • 打赏
  • 举报
回复
//参考一下这段代码,可以实现:已知BYTE类型的数组,怎样把他转换为UNicode的CString类型呢?


// example for CString::GetBuffer

CString s( "abcd" );
#ifdef _DEBUG
afxDump << "CString s " << s << "\n";
#endif
LPTSTR p = s.GetBuffer( 10 );
strcpy( p, "Hello" ); // directly access CString buffer
s.ReleaseBuffer( );
#ifdef _DEBUG
afxDump << "CString s " << s << "\n";
#endif
oyljerry 2004-12-22
  • 打赏
  • 举报
回复
MSDN中没有这个api,是不是自己定义的
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
实在是很着急,如果哪位会的话就帮帮小弟吧,
完成之后马上结帖,多谢了!~
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
小弟刚刚接触这些东西,实在不是很懂,
还请各位不耐其烦。

比如说这么一个函数吧:
bool ByteToCString(Byte *b, int byteLen, Cstring *c, bool isUnicode)
{}

谁能给出一个完整的实现代码么?辛苦了。
danyueer 2004-12-22
  • 打赏
  • 举报
回复
CString is based on the TCHAR data type. If the symbol _UNICODE is defined for your program, TCHAR is defined as type wchar_t, a 16-bit character type; otherwise, it is defined as char, the normal 8-bit character type. Under Unicode, then, CString objects are composed of 16-bit characters. Without Unicode, they are composed of 8-bit char type.

由上可知,假如你的程序定义了_UNICODE宏,CString将自动支持Unicode,否则不支持,不可以用CString来处理Unicode字符串。
你可以用_T()来包含Tag,以保证Unicode被系统识别。
老夏Max 2004-12-22
  • 打赏
  • 举报
回复
楼上正解!
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
然后呢?怎么将Tag[100]转换为CString?
danyueer 2004-12-22
  • 打赏
  • 举报
回复
BYTE型其实就是unsigned char,可以通过MultiByteToWideChar转换:

BYTE Buf[100]; // 注意里面包含的必须是一个合法的字符串!
WCHAR Tag[100];
MultiByteToWideChar(CP_ACP, 0, Buf, strlen(Buf), Tag, 100);
oyljerry 2004-12-22
  • 打赏
  • 举报
回复
*c.Format("%s",wData);
看上去怎么这么别扭
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
自己再顶一下,
麻烦各位帮忙看看了。
如果我这么写可以的话,就结帖了。
双杯献酒 2004-12-22
  • 打赏
  • 举报
回复
// 困惑!
// 怎么理解下面的wprintf ?
// VC 6.0
#include <windows.h>
#include <stdio.h>

int main()
{
BYTE data1[6] = {0xd6,0xd0,0xb9,0xfa,0x00,0x00}; // "中国"
BYTE data2[6] = {0x2d,0x4e,0xfd,0x56,0x00,0x00}; // L"中国"

wchar_t* pChina = 0;

pChina = (wchar_t*)data1;
wprintf(L"dada1 = %2S\n",pChina); //以为这个是乱码,其实不是!

pChina = (wchar_t*)data2;
wprintf(L"dada2 = %2S\n",pChina); //以为这个不是乱码,其实不是!

return 0;
}

// 结果:
/*
dada1 = 中国
dada2 = -N齎
*/
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
根据大家的提示,我大概写了一下这个函数,不知道那块有错误,
请大家帮忙指正一下。

void ByteToCString(Byte *b, int byteLen, Cstring *c, bool isUnicode)
{
if(isUnicode)
{

int i = MultiByteToWideChar(CP_ACP, 0,(LPCSTR)b, -1, NULL, 0);
WCHAR * wData = new WCHAR[i];
MultiByteToWideChar(CP_ACP, 0,(LPCSTR)b, -1, wData , i);
*c.Format("%s",wData);
delete [] wData;
}
}
可不可以这么写?谢谢大家。
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
根据大家的提示,我大概写了一下这个函数,不知道那块有错误,
请大家帮忙指正一下。

void ByteToCString(Byte *b, int byteLen, Cstring *c, bool isUnicode)
{
if(isUnicode)
{
WCHAR * wData = new WCHAR[byteLen];
int i = MultiByteToWideChar(CP_ACP, 0,(LPCSTR)b, -1, NULL, 0);
MultiByteToWideChar(CP_ACP, 0,(LPCSTR)b, -1, wData , i);
*c.Format("%s",wData);
delete [] wData;
}
}
可不可以这么写?谢谢大家。
双杯献酒 2004-12-22
  • 打赏
  • 举报
回复
是的。
fxismonk 2004-12-22
  • 打赏
  • 举报
回复
To: oyljerry(☆勇敢的心☆-Paper Writing)
我的意思是怎么实现这个函数,这个函数不是MSDN里面的。

To: wenxy1(周末了,极速飙车)
没看懂。


To:iicup(双杯献酒)
Byte数组里面本身存放的是象下面这样:
如果中文“中”字的Unicode 是:0x4e2d
那么Byte数组就是:
Byte[0] = 0x4e
Byte[1] = 0x2d
你的这种直接强制转换的方法是不是就不用MultiByteToWideChar了?

To:crystal521(水晶泪)
前面看懂了,后面不是很懂。
CComBSTR 是可以直接识别Unicode吗?
要得到CString类型,还需要怎么转换过来吗?


Mr-Chen 2004-12-22
  • 打赏
  • 举报
回复
先转换为CString
BYTE bReceive[1024];
CString stemp,str;
str = "";
for (i=0;i<1024;i++)
{ char a=*(char*)(bReceive+i);
stemp.Format("%c",a);
str += stemp;
}
然后转换为Unicode的CString ,构造一个COM类字符串,用CString作为参数即可
CComBSTR bstrStr(str);
双杯献酒 2004-12-22
  • 打赏
  • 举报
回复
看您的BYTE里面都是什么内容啊。
如果本身就是UNICODE字符串,
只是数据类型不同,可以用强制类型转换。

BYTE data[] = {....};
wchar_t* pUnicode = (wchar_t*)data;

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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