【问题标题】:cast float to wchar_t win32将浮点数转换为 wchar_t win32
【发布时间】:2013-02-17 20:56:18
【问题描述】:

这让我大吃一惊,反正我找不到将 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 以将其发送到列表框

【问题讨论】:

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


【解决方案1】:

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

你有几个选择:

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

第二个选项是唯一一个不使用第三方库的选项,因此如果您在使用库方面受到限制,那么您将被wsprintf 或std::wstringstream 困住。通常,在这种情况下,我的建议是出于类型安全原因和防止缓冲区溢出的保护而使用 std::wstringstream。

【讨论】:

    【解决方案2】:

    已经有答案了: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];
    

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2011-02-28
      • 2020-08-25
      • 2020-05-14
      相关资源
      最近更新 更多