cast float to wchar_t win32

时间:2013-02-17 20:56:18

标签: c++ windows winapi visual-studio-2012

我吓坏了,我无论如何都找不到把漂浮物扔给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以将其发送到列表框

2 个答案:

答案 0 :(得分:5)

在C ++中,转换POD会将二进制数据重新解释为转换类型,而不是那种你想要完成的类型转换。

你有几个选择:

  • 您可以使用boost::lexical_cast进行强制转换
  • 您可以使用wsprintfstd::wstringstream来处理从浮点数到宽字符串的转换
  • 如果您使用的是MFC / ATL,则可以使用CString :: Format将float转换为字符串

第二个选项是唯一一个不使用第三方库的选项,所以如果您在库中明智地使用了什么,那么您就会遇到wsprintf或std :: wstringstream。通常我在这种情况下的建议是使用std :: wstringstream,因为出于类型安全的原因和缓冲区溢出的保护。

答案 1 :(得分:3)

已有答案:What can you use to cast an int/float to a 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];