2016-11-30 4 views
-3

私はC/C++を使用していますが、ウィンドウ関数があります。 const WCHAR *?INT8、INT8、UINT8 ... UINT64、float、doubleをWCHARに変換する*

私はデータをWCHAR *に変換する必要があるいくつかのブランチに入った後、データのタイプを確認する大きなケースがあります。

私が 21を持っている場合、私はそれをL "21"にしたいと思います。 32.322 => L "32.322" など

私は手動で行うことができましたが、もっと速い方法があれば好きです!これらのコンバージョンは、より低いレベルで多く発生するようです。

ありがとうございます!

+2

[ 'のstd :: to_wstring'](http://en.cppreference.com/w/cpp/string/basic_string/to_wstring) – NathanOliver

+0

私はちょうど発見したUINT32のための一つの方法: WCHARのBUF [20] = L ""; swprintf(buf、L "%u"、UINT32_Value); この変換がOKで他の変換は何ですか? – user7042812

+0

[stringstream](http://en.cppreference.com/w/cpp/io/basic_stringstream)は、コンバージョンのニーズをすべて解決するのに最適な方法です。ちょうどostreamのように動作します(つまり、 "cout")。この場合、 'wstringstream'を使うと思います。 – Lundin

答えて

1

std::to_wstringは、C++ 11またはC++ 14を使用している場合に使用できます。そうでなければ、このように 'swprintf' を使用:

wchar_t wstr[32]; 

、整数に変換 '%D' 形式と 'swprintf' を使用する:

swprintf(wstr, L"%d", 21); 

は、適切なアレイサイズのワイド文字列バッファを作成

今 'WSTRは' あなた "21"

が含まれているとし 'swprintf' を使用し、浮動小数点に変換する '%。* F' 形式。小数点の後に最大3桁を使用します(デフォルトでは6です)。だから、それは店が少ない「のwchar_t」が必要になります。

swprintf(wstr, L"%.*f", 3, 32.322f); 

を今すぐ「WSTRは、」あなた「32.322」

は「swprintf」

sprintf, swprintfの詳細については、MSDNのページを次を見てください含まれています

+0

ありがとう!そして私はどうやってINT8、INT16 UINT8などが違うのですか? – user7042812

+0

@ user7042812 "%d"はINT8〜INT32に十分です。 INT64には "%ll"を使用してください。 UINT8〜UINT32などの符号なしデータ型には "%u"を、UINT64には "%llu"を使用してください。 –

+0

@ user7042812 printf/sprintf/swprintfなどの機能のフォーマットの詳細については、次のリンクを参照してください。http://www.cplusplus.com/reference/cstdio/printf/ –

関連する問題