测试源代码:
#include "stdafx.h"
#include "windows.h"
char* UNICODEtoASCII(const wchar_t* source)
{
DWORD size = WideCharToMultiByte(CP_OEMCP,
NULL,
source,
-1,
NULL,
0,
NULL, NULL);
char* dest = new char[size];
WideCharToMultiByte(CP_OEMCP,
NULL,
source,
-1,
dest,
size,
NULL, NULL);
return dest;
}
BYTE test[]={0xD5,0x8B,0x4B,0x6D,0x00}; //大小端模式的原因,在VC下,高位在后面
int main(int argc, _TCHAR* argv[])
{
printf("0x%X\n",*((DWORD*)test));
printf("%s",UNICODEtoASCII((wchar_t*)test));
getchar();
return 0;
}
只为测试,申请的空间我没有释放,请楼主自行修改
相关查询
WideCharToMultiByte ()函数:
WideCharToMultiByte
函数原型:
int WideCharToMultiByte(
UINT
CodePage, //指定执行转换的
代码页
DWORD
dwFlags, //允许你进行额外的控制,它会影响使用了读音符号(比如重音)的字符
LPCWSTR
lpWideCharStr, //指定要转换为宽字节字符串的
缓冲区
int
cchWideChar, //指定由参数lpWideCharStr指向的缓冲区的
字符个数
LPSTR
lpMultiByteStr, //指向接收被转换字符串的缓冲区
int
cchMultiByte, //指定由参数lpMultiByteStr指向的
缓冲区最大值
LPCSTR
lpDefaultChar, //遇到一个不能转换的宽字符,函数便会使用pDefaultChar参数指向的字符
LPBOOL
pfUsedDefaultChar //至少有一个字符不能转换为其多字节形式,函数就会把这个变量设为TRUE
);
cchMultiByte:指定由参数lpMultiByteStr指向的字符串中
字节的个数。如果lpMultiByteStr指定的字符串以空字符终止,可以设置为-1(如果字符串不是以空字符中止,设置为-1可能失败,可能成功),此参数设置为0函数将失败。
lpWideCharStr:指向接收被转换字符串的
缓冲区。
cchWideChar:指定由参数lpWideCharStr指向的缓冲区的宽字符个数。若此值为零,函数返回缓冲区所必需的
宽字符数,在这种情况下,lpWideCharStr中的缓冲区不被使用。
whcar_t,DWORD