我想要得到汉字的Unicode编码,是不是应该先得到汉字的GB码,然后再通过GB码转换为Unicode编码啊?例如,对于“你好”,先得到“你好”的GB码,然后再把它的GB码转化为Unicode编码,这个过程怎样来实现呢?有Api函数可以来调用吗? 希望大家来帮忙!
解决方案 »
- InstallShield 驱动打包
- 【【【【花费 3年 时间收集的C++&VC资料库,奉献给哥哥们】】】】
- OnMouseWheel()事件无法响应?
- 散分
- 请问我只有一个iphlpapi.dll没有头文件也没有LIB文件,能调用DLL中的函数吗?
- UltraEdit中16进制编辑的那种界面怎么实现?
- 你能不能写个程序将显示器烧掉?
- 请教如何读去MP3文件的播放时间,谢谢!
- 怎样才能将.WDL格式的文件转化为.TXT或.DOC格式的文件?
- 一个简单的问题:怎么看待文件的文件头,比如说一个位图文件。用VC的二进制方式打开看时,它的头部信息是不是代表它是位图,若是打开的EXE文件(呵呵!我没开过),它的头部信息是不是就代表它是EXE文件呢!这些代码的信息具体起什么作用??
- 请问有关windows socket api 的小问题!搞定了就给分!很急!请大家帮忙 !
- VC新手,很简单的问题,请各位帮忙!急
//将UTF8字符串转换为gb2312
_bstr_t CSync::ConvertUTF8toGB2312(XString str)
{
int n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),NULL,0);
WCHAR * pChar = new WCHAR[n+1];
n=MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pChar,n);
pChar[n]=0;
OLECHAR * pTempBuffer = pChar;
BSTR strPassword = SysAllocString(pTempBuffer);
_bstr_t aa (strPassword,FALSE);
SysFreeString(strPassword);
delete []pChar;
return aa;
}
if you want to Convert GB2312 to UTF8,it like this function
函数W2A(Unicode字符串,字符串缓冲,长度)
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // string to map
int cbMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // wide-character buffer
int cchWideChar // size of buffer
);
unsigned char buf[129]; //发送缓冲区
ZeroMemory(buf,sizeof(buf)); //缓冲区清零
CString tmpstr(str); //复制要发送的字符串
int multibytelen=WideCharToMultiByte( //计算从Unicode转换到Ansi后需要的字节数
CP_ACP, //根据ANSI code page转换
WC_COMPOSITECHECK | WC_DEFAULTCHAR, //转换出错用缺省字符代替
tmpstr.GetBuffer(str.GetLength()), //要转换的字符串地址
str.GetLength(), //要转换的个数
0, //转换后字符串放置的地址
0, //最多转换字符的个数,为0表示返回转换Unicode后需要多少个字节
0, //缺省
)
2.下面这个是从Ansi到Unicode的换:
int widecharlen=MultiByteToWideChar( //计算从Ansi转换到Unicode后需要的字节数
CP_ACP,
MB_COMPOSITE,
szBuf, //要转换的Ansi字符串
-1, //自动计算长度
0,
0
);
unsigned char szBuff[MAX_BUFF];
ZeroMemory(szBuff,sizeof(szBuff));
MultiByteToWideChar( //从Ansi转换到Unicode字符
CP_ACP,
MB_COMPOSITE,
szBuf,
-1,
(LPWSTR)szBuff, //转换到tmpstr
widecharlen //最多转换widecharlen个Unicode字符
);
广东深圳 温卫江在实际的应用系统中,我们往往会需要在程序运行时获取当前机器的网卡的MAC地址,以便作为某种标识之用,如控制程序的合法性等。下文介绍如何用Microsoft VisualC++ 6.0开发这样的程序。这里采用的方法是通过Windows 9x/NT/Win2000中内置的NetApi32.DLL的功能来实现的。首先通过发送NCBENUM命令,获取网卡的数目和每张网卡的内部编号,然后对每个网卡标号发送NCBASTAT命令获取其MAC地址。注意:这里的网卡是指捆绑了NetBEIU协议的通信协议栈,可以在网卡的属性处查看到。请运行VC++,打开一个新的工程,选择创建一个Win32 Console程序,然后按下文输入代码,并请参见其中的注释:#include "stdafx.h"#include <windows.h>#include <wincon.h>#include <stdlib.h>#include <stdio.h>#include <time.h>// 因为是通过NetAPI来获取网卡信息,所以需要包含其题头文件nb30.h#include <nb30.h>typedef struct _ASTAT_{ADAPTER_STATUS adapt;NAME_BUFFERNameBuff [30];} ASTAT, * PASTAT;ASTAT Adapter;// 定义一个存放返回网卡信息的变量// 输入参数:lana_num为网卡编号,一般地,从0开始,但在Windows 2000中并不一定是连续分配的void getmac_one (int lana_num){NCB ncb;UCHAR uRetCode;memset( &ncb, 0, sizeof(ncb) );ncb.ncb_command = NCBRESET;ncb.ncb_lana_num = lana_num // 指定网卡号// 首先对选定的网卡发送一个NCBRESET命令,以便进行初始化uRetCode = Netbios( &ncb );printf( "The NCBRESET return code is: 0x%x \n", uRetCode );memset( &ncb, 0, sizeof(ncb) );ncb.ncb_command = NCBASTAT;ncb.ncb_lana_num = lana_num; // 指定网卡号strcpy((char *)ncb.ncb_callname,"*" );ncb.ncb_buffer = (unsigned char *) &Adapter; // 指定返回的信息存放的变量ncb.ncb_length = sizeof(Adapter);// 接着,可以发送NCBASTAT命令以获取网卡的信息uRetCode = Netbios( &ncb );printf( "The NCBASTAT return code is: 0x%x \n", uRetCode );if ( uRetCode == 0 ){// 把网卡MAC地址格式化成常用的16进制形式,如0010-A4E4-5802printf( "The Ethernet Number[%d] is: %02X%02X-%02X%02X-%02X%02X\n",lana_num,Adapter.adapt.adapter_address[0],Adapter.adapt.adapter_address[1],Adapter.adapt.adapter_address[2],Adapter.adapt.adapter_address[3],Adapter.adapt.adapter_address[4],Adapter.adapt.adapter_address[5] );}}int main(int argc, char* argv[]){NCB ncb;UCHAR uRetCode;LANA_ENUM lana_enum;memset( &ncb, 0, sizeof(ncb) );ncb.ncb_command = NCBENUM;ncb.ncb_buffer = (unsigned char *) &lana_enum;ncb.ncb_length = sizeof(lana_enum);// 向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡、每张网卡的编号等uRetCode = Netbios( &ncb );printf( "The NCBENUM return code is: 0x%x \n", uRetCode );if ( uRetCode == 0 ){printf( "Ethernet Count is : %d\n\n", lana_enum.length);// 对每一张网卡,以其网卡编号为输入编号,获取其MAC地址for ( int i=0; i<lana_enum.length; ++i)getmac_one( lana_enum.lana[i]);}return 0;}此时,按F7编译,按F5运行即可。
// Convert char * to BSTR //
//------------------------//
inline BSTR ConvertStringToBSTR(const char* pSrc)
{
if(!pSrc) return NULL;
DWORD cwch;
BSTR wsOut(NULL); if(cwch = ::MultiByteToWideChar(CP_ACP, 0, pSrc, -1, NULL, 0))//get size minus NULL terminator
{
cwch--;
wsOut = ::SysAllocStringLen(NULL, cwch);
if(wsOut)
{
if(!::MultiByteToWideChar(CP_ACP, 0, pSrc, -1, wsOut, cwch))
{
if(ERROR_INSUFFICIENT_BUFFER == ::GetLastError())
return wsOut;
::SysFreeString(wsOut);//must clean up
wsOut = NULL;
}
}
};
return wsOut;
};//------------------------//
// Convert BSTR to char * //
//------------------------//
inline char* ConvertBSTRToString(BSTR pSrc)
{
if(!pSrc) return NULL;
DWORD cb,cwch = ::SysStringLen(pSrc);//convert even embeded NULL
char *szOut = NULL;
if(cb = ::WideCharToMultiByte(CP_UTF8, 0, pSrc, cwch + 1, NULL, 0, 0, 0))//CP_ACP
{
szOut = new char[cb];
if(szOut)
{
szOut[cb - 1] = '\0';
if(!::WideCharToMultiByte(CP_UTF8, 0, pSrc, cwch + 1, szOut, cb, 0, 0))//CP_ACP
{
delete []szOut;//clean up if failed;
szOut = NULL;
}
}
} return szOut;
};
"Free_Man(浪迹天涯)和liuxianzhi(碧渊),你们俩牛人啊!哈哈"“助人为快乐之本”嘿嘿~~!!
怎样把UFT8码转入unicode或ascii码
???
char *str1="你好";
_bstr_t str=str1;
WCHAR *str2=str;
str2就是你要的UNICODE码