我吓坏了,我无论如何都找不到把漂浮物扔给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以将其发送到列表框
答案 0 :(得分:5)
在C ++中,转换POD会将二进制数据重新解释为转换类型,而不是那种你想要完成的类型转换。
你有几个选择:
boost::lexical_cast
进行强制转换wsprintf
或std::wstringstream
来处理从浮点数到宽字符串的转换第二个选项是唯一一个不使用第三方库的选项,所以如果您在库中明智地使用了什么,那么您就会遇到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];