2010-11-18 14 views
0

だからのWin32 APIに、私は私の主な機能は、このように定義されている:WCHAR *を通常の文字列に変換するにはどうすればよいですか?

wmain(WCHAR *、int型のargc ARGV [])

私はそれにいくつかの引数を渡している、と私は実行したいのですが引数の値に基づいたスイッチケースです。

wmain(int argc, WCHAR* argv[]) 
{ 
    char* temp = argv[]; 
    switch (temp) { 
    case "one": blah blah; 
... 
} 

もちろん、temp = argv []は機能しません。私はそれを変換するための提案を探しています。今のところ私はif-else-ifのことが起こっていて、それは非常に非効率的です!

私はそれを変換する必要がある理由は、WCHAR *でスイッチケースを実行できないためです。

ありがとうございます。

答えて

0

これは良い考えであるかわかりません。 WCHAR *には、意味のある方法でchar *にマップできないUnicode文字を含めることができます。あなたがこれを無視したい場合は、http://www.codeguru.com/forum/showthread.php?t=336106にフォーラムの投稿があり、WCHAR *からchar *に変換するための提案があります。

+0

OPはASCII文字を数値に変換しようとしています。彼はコマンドラインのWCHAR *で始まっています。コンソールに日本語の文字を入力することはほとんどありません。 –

2

char *でスイッチを実行することはできません。 (実際にWCHAR *をchar *に変換する必要がある場合は、WideCharToMultiByteを使用してください)

lstrcmpiCompareStringなどの文字列比較関数を使用する場合はif/elseを使用する必要があります。

また、はstd ::文字列し、その簡単にはstd :: wstringのから、それを変換してみ​​またはgetopt

+0

現在、私はif/elseを使用していますが、25の条件があり、非常に非効率です。また、私はサードパーティのライブラリを使用することはできません。その他の提案はありますか? – Freakishly

+0

スイッチを悪くしたいのであれば、おそらく入力引数をハッシュし、case文にあらかじめ計算されたハッシュを使うことができます。 – Anders

+0

より簡単な方法があります:ATL変換マクロ - T2A() –

0

のようなパラメータのパーサライブラリのいずれかを使用し、多分短い方法があります。

コンバートWCHARは*のstd :: wstringのconstractorを使用してwstringの::はstd、その後はstdに変換するためのstd :: wstringの方法のいずれかを使用する::文字列

0

は、ここで私はいくつかの時間前に書いた簡単な例です。

新しいWin32コンソールアプリケーションを作成し、ATLサポートを選択します。これを追加し、コンパイル/実行...もちろん

#include "stdafx.h" 
#include <iostream> 

using namespace std; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
// A _TCHAR is a typedef'd, depending on whether you've got a unicode or MBCS build 

// ATL Conversion macros are documented here 
// http://msdn.microsoft.com/en-us/library/87zae4a3(VS.80).aspx 
// Declare USES_CONVERSION in your function before using the ATL conversion macros 
// e.g. T2A(), A2T()  
USES_CONVERSION; 

TCHAR* pwHelloWorld = _T("hello world!"); 
wcout << pwHelloWorld << endl; 

// convert to char 
char* pcHelloWorld = T2A(pwHelloWorld); 
cout << pcHelloWorld << endl; 


cin.get(); 

return 0; 
} 

、あなたは文字列に切り替えることはできませんが、これはあなたがcharにWCHARを読み取るために必要な情報を与える必要があります。そこから、簡単にintに変換することができます。 希望する;)

関連する問題