目录
ATL 模板宏
W2A 转多字节
A2W 转宽字节
A2T 转 CString
T2A 转 char *
TEXT 宏定义
CString 转换
int 转 CString
double 转 CString
CString 转 double
CString 转换 string
宽字符串转换
WideCharToMultiByte
BSTR 转换 string
DWORD
LPCSTR 长指针常量字符串
LPCWSTR 常量宽字符指针
T2W 转换多字节 char *
A2CW 转换多字节
#include
宏定义:USES_CONVERSION
把 unicode 字符转换成 ansi 字符,宽字节转换为多字节
多字节转换为宽字节,char * ==> wchar *
char * ==> CString
CString ==> char *
根据项目属性 —— 字符编码,进行自动编码类型
AfxMessageBox( TEXT( "注入成功!" ) );
CString str;
int number = 15;
// str="15"
str.Format(_T("%d"),number);
// str="1.4600"
str.Format(_T("%.4f"),number);
str = _ttof( "7000.000" ); // 7000.000
注:const char* 类型可以直接给 CString 类型赋值
CString cstr;
string str = “asdasd”;
cstr = str.c_str();
CString cstr = “asdasd”;
string str = cstr;
const char * pchar = str.c_str();
此函数把宽字符串转换成指定的新的字符串,如ANSI,UTF8等,新字符串不必是多字节字符集。 (---Unicode 转 ANSI(GB2312),UTF8)
int WideCharToMultiByte(
UINT CodePage, // 指定执行转换的代码页,可为系统已安装或有效的任何代码页所给定的值
DWORD dwFlags, // 指定如何处理没有转换的字符,不设此函数会运行的更快些,设为 0
LPWSTR lpWideCharStr, // 待转换的宽字符串
int cchWideChar, // 待转换宽字符串的长度,-1表示转换到字符串结尾
LPCSTR lpMultiByteStr, // 接收转换后输出新串的缓冲区
int cbMultiByte, // 输出缓冲区大小,若为0,lpMultiByteStr 将被忽略,
// 函数将返回所需缓冲区大小而不使用 lpMultiByteStr
LPCSTR lpDefaultChar, // 指向字符的指针,找不到相应字符时此字符为默认字符代替。
// 如果为 NULL 则使用系统默认字符。
// NULL 的 dwFlags 用此参数,失败并设置错误码ERROR_INVALID_PARAMETER
PBOOL pfUsedDefaultChar // 开关变量的指针,用以表明是否使用过默认字符。
// NULL 的 dwFlags 使用此参数,失败并设置错误码ERROR_INVALID_PARAMETER。
// lpDefaultChar 和 lpUsedDefaultChar 都设为 NULL,函数会更快一些。
);
// cbMultiByte 非 0,返回写入 lpMultiByteStr 的字节数(包括字符串结尾的null);
// cbMultiByte 为 0,则返回转换所需字节数,函数失败,返回 0。
参数 | 参数值 | 作用 |
---|---|---|
CodePage | CP_ACP | 当前系统ANSI代码页 |
CP_MACCP | 当前系统Macintosh代码页 | |
CP_OEMCP | 当前系统OEM代码页,一种原始设备制造商硬件扫描码 | |
CP_SYMBOL | 符号代码页 | |
CP_THREAD_ACP | 当前线程ANSI代码页 | |
dwFlags | WC_NO_BEST_FIT_CHARS | 把不能直接转换成相应多字节字符的 Unicode 字符转换成 lpDefaultChar 指定的默认字符。 |
WC_ERR_INVALID_CHARS | 此选项会致使函数遇到无效字符时失败返回,并且 GetLastError 会返回错误码ERROR_NO_UNICODE_TRANSLATION。否则函数会自动丢弃非法字符。此选项只能用于 UTF8。 | |
WC_COMPOSITECHECK | 把合成字符转换成预制的字符。 它可以与后三个选项中的任何一个组合使用,如果没有与他们中的任何一个组合,则与选项 WC_SEPCHARS 相同。 |
|
WC_DISCARDNS | 转换时丢弃不占空间的字符 | |
WC_SEPCHARS | 转换时产生单独的字符,此是默认转换选项 | |
WC_DEFAULTCHAR | 转换时使用默认字符代替例外的字符,(最常见的如’?’) |
BSTR dval;
// VarArray.GetStringByIndex( i, &dval );
variableNumber.push_back( _com_util::ConvertBSTRToString( dval ) );
Double word,unsigned long,每个 word 为 2 个字节的长度,DWORD 为 4 个字节,每个字节 8 位,共 32 位,属于 MFC 的数据类型。
LPCSTR 是 win32 和 VC++ 所使用的一种字符串数据类型,L 表示 long,P 表示指针,C 表示常量,STR 表示字符串。
/// 1 LPCSTR 转 CString
LPCSTR lpStr = "text";
CString str(lpStr);
/// 2 CString 转 LPCSTR
CString cstr("text");
LPCSTR lpstr = (LPCSTR)cstr.GetBuffer(cstr.GetLength());
char* szStr = "测试字符串";
CString str = CString(szStr);
USES_CONVERSION;
LPCWSTR wszClassName = new WCHAR[str.GetLength()+1];
wcscpy((LPTSTR)wszClassName,T2W((LPTSTR)str.GetBuffer(NULL)));
str.ReleaseBuffer();
char* szStr = "测试字符串";
CString str = CString(szStr);
USES_CONVERSION;
LPCWSTR wszClassName = A2CW(W2A(str));
str.ReleaseBuffer();