如何将HWND转换为LPCWSTR并输出0x前缀的十六进制格式?
解决HWND转LPCWSTR时输出0x前缀短格式的问题
你当前的代码把HWND当作指针输出,所以64位系统下会固定输出16位带前导零的十六进制串。要得到0x5D0512这种格式,只需两步调整:
- 将HWND转换成对应宽度的无符号整数类型
UINT_PTR(保证和指针位数一致),让流按整数规则输出,自动去掉前导零。 - 添加
0x前缀,可通过流操纵符自动添加,也可手动拼接。
修改后的代码示例:
#include <sstream> #include <iomanip> #include <string> // 假设hWnd是你的窗口句柄 std::wostringstream ss; // std::showbase自动添加0x前缀,std::uppercase让十六进制字母大写(可选) ss << std::showbase << std::hex << std::uppercase << static_cast<UINT_PTR>(hWnd); std::wstring wstr = ss.str(); LPCWSTR title = wstr.c_str();
如果不想用流操纵符,也可以手动写前缀,效果完全一致:
std::wostringstream ss; ss << L"0x" << std::hex << std::uppercase << static_cast<UINT_PTR>(hWnd);
这样处理后,title中的内容就会是0x5D0512格式,不会包含多余的前导零。
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

