在win32 API中将int转换为string
Convert int to string in win32 API
我试图在我的窗口应用程序的客户端区域显示,例如一个系统本地小时。
在结果中我得到一个错误:智能感知:类型"CHAR *"的参数与类型"LPCWSTR"的参数在TextOut函数(参数4)不兼容。有人能帮帮我吗?
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SYSTEMTIME lt;
GetLocalTime(<);
CHAR info[20] ;
_itoa(lt.wHour,info,16);
TextOut(hdc,200,200,info,strlen(info));
EndPaint(hWnd, &ps);}
break;
您正在为Unicode编译程序,这意味着对文本进行操作的Win32函数被映射为宽版本。因此,TextOut
是一个扩展为TextOutW
的宏,并期望使用UTF-16编码的const wchar_t*
文本。但是你提供的是8位文本。
一个简单的修复方法是调用TextOut
的ANSI版本,即TextOutA
。
TextOutA(hdc, 200, 200, info, strlen(info));
但从长远来看,你可能会考虑坚持使用本机宽API。这将要求您使用任何文本处理函数的广泛版本。您还可以很好地避免itoa
,并开始使用标准的c++方法在文本和整数之间进行转换。
例如,使用c++ 11时,您可以使用std::to_wstring
.
std::wstring hour = std::to_wstring(lt.wHour);
TextOut(hdc, 200, 200, hour.c_str(), hour.length());
通常您需要的是使用宽字符替代_itoa()
。在本例中,您需要_itow()
。参考。
你可以这样写:
case WM_PAINT: {
hdc = BeginPaint(hWnd, &ps);
SYSTEMTIME lt;
GetLocalTime(<);
WCHAR info[20];
_itow(lt.wHour, info, 16);
TextOut(hdc, 200, 200, info, wcslen(info));
EndPaint(hdc, &ps);
}
break;
特别要注意使用WCHAR
代替CHAR
,使用_itow()
代替_itoa()
,使用wcslen()
代替strlen()
。
另外,请注意字符串"以字符为单位"的长度(如TextOut()
的文档所指出的)和它的"以字节为单位"的长度的区别。在所谓的"Ansi字符串"中,它们是相同的,但在WCHAR字符串中它们是不同的(BMP中的每个字符占用两个字节;BMP之外的每个字符占用4个字符)。
否则,代码是直接类似的。在使用UTF-16编程时,您将及时掌握使用这些宽字符字符串函数而不是常规字符串函数的窍门。
相关文章:
- 使用char类型将decimal转换为string,将string转换为decimal
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 将日语 wstring 转换为 std::string
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 如何在 std::string 和 Aws::String 之间进行转换?
- C++:将模板类型 char 转换为 std::string
- 无法<string>从"常量字符 []"转换为<类名>
- 将 std::string( "x3BxDEx7C" ) 转换为可读的十六进制字符串?
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- 无法从'const std::string [3]'转换为'std::string'
- 从 std::string 转换为 const 无符号整数
- 使用 .data() 将字符数组转换为 std::string 不会转换整个数组
- 为什么std::string没有(显式)const char*强制转换
- 将单个字符转换为 std::string 前缀 \x01
- C++ 模板函数无法将"std:string"转换为"double"作为回报
- 将 std::string 转换为 const char* 用于 printf 消耗
- Swig无法将python3的字节对象转换为std::string
- 将utf16宽std::wstring转换为utf8窄std::string以获得罕见字符时出现问题
- 将 std::string 转换为 const tchar*