2011-07-15 15 views
1

変換bstr_tをC++で倍にする方法は?bstr_tをdoubleに変換する

私は* charに変換しようとしていたのですが、* charをdoubleに変換しようとしていましたか?

+0

「bstr_t」とは何ですか?コードを投稿したり、その型をC++プリミティブ型にデコードしたりします。 –

+1

COM BSTRのRAIIラッパークラス(基本的に特別な意味を持つワイド文字へのポインタ) –

+0

@Kerrek SB:Windows固有の[C++参照カウントラッパー](http://msdn.microsoft .com/en-us/library/zthfhkd6.aspx)のWindows固有の['BSTR'型](http://msdn.microsoft.com/en-us/library/1b2d7d2c-47af-4389-a6b6-b01b7e915228 (VS.85))。これは「基本文字列」を表します。基本的に、4バイトの長さのプレフィックスを持つ、ヌルで終了するUnicode文字列です。 –

答えて

4

のためにあなたがchar*かをお持ちの場合wchar_t*文字列の場合は、strtod/wcstod関数を使用してdoubleを読み取ります。

など。

_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)を呼び出すことに注意してください結果はキャッシュされます)。 BSTRは基本的にワイド文字なので、wchar_t *への変換は安価です。 –

+0

フランク:お勧めします。だから、 'wcstod'バージョンを好む:-) –

2

あなたはconst char*にキャスト(カバーの下にMBCSへのワイド文字のマッピングを処理し、このためconverterがある)、その後、あなたが望むように倍増すると変換することができます - stringstream::operator>>

1

ロケールを制御する場合は、wcstodまたは_wcstod_lを呼び出します。

bstr_t myBstr_t = L"1.234"; 

double d = wcstod(myBstr_t, NULL); 
関連する問題