2011-07-15 56 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);