将float强制转换为wchar_t win32
cast float to wchar_t win32
我很奇怪,我无论如何都找不到将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
进行类似强制转换 - 您可以使用
wsprintf
或std::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];
相关文章:
- Win32编译器选项和内存分配
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- C++win32 API创建多个类似视口的窗口
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 检测win32服务创建和删除的最佳方法
- WIN32:C++,为什么在WM_CLOSE上调用Messagebox函数程序正在冻结
- 将 win32 hbitmap 转换为 winrt softwarebitmap
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 从预处理器获取 Windows 版本(C++ Win32)
- Issues with Win32 ReadProcessMemory API
- Win32 发送输入鼠标移动滞后并冻结
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 将 Win32/WinAPI 应用程序移植到 wxWidgets
- Win32 API 控制台光标在 WriteConsole 后不移动
- C++ Win32 Threads
- 如何使用 Win32 WCHAR 执行字符串操作