一、數值/基本型別 → 字串 (char*)
int i = 100; long l = 2001; char buf[256];
itoa(i, buf, 10); // 十進制
itoa(i, buf, 2); // 二進制
ltoa(l, buf, 10); // 長整數
// 浮點數建議用 sprintf
sprintf(buf, "%f", 3.14);
sprintf(buf, "%.2f", 3.14159); // 保留兩位小數
二、CString/COM 字串 → char*
// CString (ANSI 專案)
CString str = "Hello";
char* p = (LPSTR)(LPCTSTR)str;
// _variant_t (BSTR)
_variant_t v = "World";
char* p = _com_util::ConvertBSTRToString((_bstr_t)v);
三、字串 → 數值/基本型別
char buf[] = "12345";
int i = atoi(buf);
long l = atol(buf);
double d = atof(buf);
四、數值/指標 → CString
CString str;
str.Format(_T("%d"), 100);
str.Format(_T("%.2f"), 3.14);
str = "直接賦值"; // char* / TCHAR*
五、BSTR / _bstr_t / CComBSTR 互轉
- BSTR:COM 寬字串,
SysAllocString/SysFreeString 管理。
- _bstr_t:C++ 智慧封裝,**推薦首選**,運算子重載豐富,自動引用計數。
- CComBSTR:ATL 封裝,功能相近。
// char* → BSTR
BSTR b = _com_util::ConvertStringToBSTR("資料"); // 需 comutil.h + comsupp.lib
// BSTR → char*
char* p = _com_util::ConvertBSTRToString(b); delete[] p;
// _bstr_t 直接轉換
_bstr_t bt = "text";
const char* p = bt; // 僅讀
_bstr_t bt2 = "other"; // 複製
六、VARIANT / _variant_t / COleVariant
// 手動 VARIANT
VARIANT v; VariantInit(&v);
v.vt = VT_I4; v.lVal = 2001;
// _variant_t (推薦)
_variant_t vt1(100);
_variant_t vt2 = (long)200;
_variant_t vt3 = "字串"; // 自動 VT_BSTR
// COleVariant
COleVariant ov1("字串"), ov2((long)1999);
CString s = (BSTR)ov1.pbstrVal;
long val = ov2.lVal;
七、WPARAM/LPARAM 位元拆解
LPARAM lParam;
WORD lo = LOWORD(lParam); // 低 16 位
WORD hi = HIWORD(lParam); // 高 16 位
WORD wVal;
BYTE lo8 = LOBYTE(wVal); // 低 8 位
BYTE hi8 = HIBYTE(wVal); // 高 8 位