2

float を wchar_t にキャストする方法が見つからないか、間違った場所を探していたのかもしれません。

 float cNumbers[9]  = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0};
 float x            = 3.0;
 float temp     = 0.0;
 wchar_t data[]     = {0};

 for(int i=0; i < sizeof(cNumbers); i++){

    temp = x / cNumbers[i];
    bool isInt = temp == static_cast<int>(temp);

    if(isInt){
        data =  temp; //this is a big fail
        addToList(hWnd,data);
    }
  }

void addToList(HWND hWnd,const wchar_t * data ){

  SendMessage(GetDlgItem(hWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM)data); 
}

問題は、フロート値を wchar_t に変換してリストボックスに送信したいことです

4

2 に答える 2

5

C++ では、POD をキャストするとバイナリ データがキャスト先の型として再解釈され、目的の型変換は行われません。

ここにはいくつかのオプションがあります。

  • boost::lexical_castキャストのような変換に使用できます
  • wsprintfまたはを使用std::wstringstreamして、float からワイド文字列への変換を処理できます。
  • MFC/ATL を使用している場合は、CString::Format を使用して float を文字列に変換できます。

2 番目のオプションは、サードパーティのライブラリを使用しない唯一のオプションであるため、使用できるライブラリが制限されている場合は、wsprintfまたは std::wstringstream のいずれかを使用することになります。通常、その場合の私の推奨は、型の安全性の理由とバッファオーバーフローからの保護の両方のために std::wstringstream を使用することです。

于 2013-02-17T21:05:46.067 に答える
3

すでに答えがあります: int/float を wchar_t* にキャストするには何を使用できますか?

使用するだけです:

float x = 0.0f;

std::wostringstream woss;
woss << x;       
std::wstring ws = woss.str();
const wchar_t* cwc = ws.c_str();
std::vector<wchar_t> buf( cwc , cwc + (ws.size() + 1) );
wchar_t* x2 = &buf[0];
于 2013-02-17T21:07:12.370 に答える