将float强制转换为wchar_t win32

cast float to wchar_t win32

本文关键字:wchar win32 转换 float      更新时间:2023-10-16

我很奇怪,我无论如何都找不到将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); 
}

问题是我想将float值转换为wchar_t,然后将其发送到列表框

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

这里有几个选项:

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

第二个选项是唯一一个不使用第三方库的选项,因此,如果您在库方面的使用受到限制,则只能使用wsprintf或std::wstringstream。在这种情况下,通常我的建议是使用std::wstringstream,这既是出于类型安全的原因,也是为了防止缓冲区溢出。

已经有了答案:您可以使用什么将int/foat强制转换为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];