首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 常用資料類型轉換完全指南

     編輯:VC 教學

前言

初學 VC++ 時,面對 int、long、float、double、CString、BSTR、_variant_t、_bstr_t、CComBSTR 等類型互相轉換常感困惑。本文整理常見類型轉換方法,供查閱參考。

一、其他類型轉為字串 (char*)

1. 整數類型

int i = 100;
long l = 2001;
char temp[200];

itoa(i, temp, 10);  // 十進制
itoa(i, temp, 2);   // 二進制
ltoa(l, temp, 10);  // 長整數

2. 浮點數

使用 _fcvt 或 sprintf:

double d = 3.1415926535;
int decimal, sign;
char* buffer = _fcvt(d, 7, &decimal, &sign);
// decimal 為小數點位置,sign 為正負號

通用 sprintf 範例:

char buffer[200];
sprintf(buffer, "%d", 35);
sprintf(buffer, "%ld", 1000L);
sprintf(buffer, "%f", 1.732f);

3. CString 轉 char*

CString str = "2008北京奧運";
char* buf = (LPSTR)(LPCTSTR)str; // 注意 Unicode 專案需用 WideCharToMultiByte

4. BSTR / _bstr_t / CComBSTR 轉 char*

// BSTR
BSTR bstr = ::SysAllocString(L"程序員");
char* buf = _com_util::ConvertBSTRToString(bstr);
SysFreeString(bstr);

// _bstr_t (推薦,運算子重載方便)
_bstr_t bstrVar("test");
const char* buf = bstrVar; // 僅讀

// CComBSTR
CComBSTR bstrVar("test");
char* buf = _com_util::ConvertBSTRToString(bstrVar.m_str);

二、字串轉為其他類型

char temp[] = "123";
int i = atoi(temp);
long l = atol(temp);
double d = atof(temp);

CString str = temp; // 直接賦值

三、其他類型轉 CString

使用 Format 成員函數:

CString str;
str.Format(_T("%d"), 100);
str.Format(_T("%f"), 3.14);
str = "直接賦值字串指標";

四、BSTR、_bstr_t、CComBSTR 詳解

  • BSTR:32 位指標,指向字串長度前綴的 Unicode 字串,需手動 SysAllocString/SysFreeString 管理記憶體。
  • _bstr_t:C++ 封裝類,重載運算子,自動管理引用計數,強烈推薦日常使用。
  • CComBSTR:ATL 封裝類,功能類似 _bstr_t,適合 ATL 專案。

轉換輔助函數需包含 comutil.h 並連結 comsupp.lib:

BSTR b = _com_util::ConvertStringToBSTR("資料");
char* p = _com_util::ConvertBSTRToString(b);

五、VARIANT、_variant_t、COleVariant

VARIANT 是 COM 通用資料結構,核心為 vt (類型標籤) 與聯合體數值欄位。

手動操作 VARIANT

VARIANT va;
VariantInit(&va); // 初始化為 VT_EMPTY
va.vt = VT_I4;    // 指定長整數
va.lVal = 2001;   // 賦值

常見 vt 對應表:VT_I2(short)、VT_I4(long)、VT_R4(float)、VT_R8(double)、VT_BSTR(BSTR)、VT_BOOL(VARIANT_BOOL)、VT_DISPATCH(IDispatch*) 等。

使用 _variant_t / COleVariant 簡化操作

_variant_t v1(100);        // 自動設定 VT_I4
_variant_t v2 = (long)200; // 運算子重載
COleVariant v3("字串"), v4((long)1999);
CString s = (BSTR)v3.pbstrVal;
long val = v4.lVal;

_variant_t 封裝了 VariantInit/VariantClear,大幅降低記憶體洩漏風險,建議優先使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved