cast float to wchar_t win32

问题描述:

它吓坏了我,我无法找到将浮点数转换为wchar_t或者我正在寻找错误的地方!cast float to wchar_t win32

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的将其发送到列表框中

+0

用VS2012还可以使用'的std :: to_wstring(X)'转换为'wstring'。 – 2013-02-17 22:17:14

+0

[你可以使用什么将一个int/float转换为wchar \ _t \ *?](http://stackoverflow.com/questions/1860945/what-c​​an-you-use-to-cast-an -int-float到一个-WCHAR-T) – Deanna 2013-02-19 14:24:17

在C++中,铸造荚会重新解释的二进制数据作为所述铸造键入与不做的那种类型的您想要完成的转换。

你有几个选择这里:

  • 可以使用boost::lexical_cast的铸像转换
  • 可以使用wsprintfstd::wstringstream处理从float转换为宽字符串
  • 如果您正在使用MFC/ATL,你可以使用的CString ::格式的浮动转换为字符串

第二个选项是唯一一个不使用第三方库,所以如果受限于可以使用库的方式,则可能会遇到wsprintf或std :: wstringstream。通常我建议在这种情况下使用std :: wstringstream来实现类型安全性和缓冲区溢出保护。

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