2011-07-15 60 views
1

如何在C++中將變換bstr_t加倍?將bstr_t轉換爲雙精度

我想轉換爲* char,然後* char加倍?

+0

什麼是'bstr_t'?發佈代碼和/或將類型解碼爲C++基元類型。 –

+1

這是一個爲COM'BSTR'(這是一個指向寬字符的特殊的語義,基本上) –

+0

@Kerrek SB的RAII包裝類:這是一個特定於Windows的[C++引用計數包裝(http://msdn.microsoft .com/en-us/library/zthfhkd6.aspx)用於特定於Windows的['BSTR'類型](http://msdn.microsoft.com/zh-cn/library/1b2d7d2c-47af-4389-a6b6-b01b7e915228 (VS.85)),代表「基本字符串」。它本質上是一個雙空終止的Unicode字符串,其前綴長度爲4字節。 –

回答

4

如果你有char*wchar_t*字符串,使用strtod/wcstod函數讀取double。

E.g.使用@史蒂夫的建議:

_bstr_t x; 
double q = wcstod(x, NULL); // implicit conversion! 
double p = strtod(x, NULL); // same 

顯然_bstr_t具有隱式轉換運營商既const char *const wchar_t*,這樣你就可以直接在浮動解析函數使用它們。

+0

請注意,轉換爲char *調用[ConvertBSTRToString](http://msdn.microsoft.com/en-us/library/ewezf1f6(v = VS.100).aspx),它分配內存,因此它相對昂貴(儘管結果被緩存)。轉換到wchar_t *是便宜的,因爲無論如何BSTR基本上是一個寬字符。 –

+0

弗蘭克:很高興知道。所以更喜歡'wcstod'版本:-) –

1

呼叫wcstod或_wcstod_l如果你想控制區域。

bstr_t myBstr_t = L"1.234"; 

double d = wcstod(myBstr_t, NULL);