C++ c+中UINT和LPCWSTR之间的转换+;
如何获取C++ c+中UINT和LPCWSTR之间的转换+;,c++,string-conversion,C++,String Conversion,如何获取UINT类型变量的字符串表示形式(如LPCWSTR)?aLPCWSTR是一个常量LPWSTR,它是指向宽字符串的指针。您应该使用std::wstringstream: #include <sstream> // ... UINT number = 42; std::wstringstream wss; std::wstring str; wss << number; wss >> str; LPCWSTR result = str.c_str()
UINT
类型变量的字符串表示形式(如LPCWSTR
)?aLPCWSTR
是一个常量LPWSTR
,它是指向宽字符串的指针。您应该使用std::wstringstream
:
#include <sstream>
// ...
UINT number = 42;
std::wstringstream wss;
std::wstring str;
wss << number;
wss >> str;
LPCWSTR result = str.c_str();
#包括
// ...
UINT数=42;
std::wstringstream wss;
std::wstring-str;
wss>str;
LPCWSTR result=str.c_str();
ALPCWSTR
是一个常量LPWSTR
,它是指向宽字符串的指针。您应该使用std::wstringstream
:
#include <sstream>
// ...
UINT number = 42;
std::wstringstream wss;
std::wstring str;
wss << number;
wss >> str;
LPCWSTR result = str.c_str();
#包括
// ...
UINT数=42;
std::wstringstream wss;
std::wstring-str;
wss>str;
LPCWSTR result=str.c_str();
试试看。它接受一个无符号整数、宽字符缓冲区的地址以及用于转换的基数
下面是一个例子:
UINT x = 1000245;
LPWSTR y = (LPWSTR)malloc(30);
_itow(x, y, 10);
试试看。它接受一个无符号整数、宽字符缓冲区的地址以及用于转换的基数 下面是一个例子:
UINT x = 1000245;
LPWSTR y = (LPWSTR)malloc(30);
_itow(x, y, 10);
UINT
是无符号int的类型定义,LPCWSTR
是指向16位字符字符串的32位指针(指向常量宽字符串akaconst wchar\u t*
)。你是想把UINT
转换成一个字符串,还是真的想把UINT
转换成一个指向字符串的指针?不,我是说字符串,不是指针。你没有回答@birrree的问题——你是想得到整数的字符串表示形式(比如“itoa”)?@birrree:这不一定是32位的。它很可能是64位。@DeadMG-我直接从一个MSDN网站上得到了这个解释,可能有点过时(x64之前)。UINT
是无符号int的类型定义,LPCWSTR
是指向16位字符字符串的32位指针(指向常量宽字符串akaconst wchar\u t*
)。你是想把UINT
转换成一个字符串,还是真的想把UINT
转换成一个指向字符串的指针?不,我是说字符串,不是指针。你没有回答@birrree的问题——你是想得到整数的字符串表示形式(比如“itoa”)?@birrree:这不一定是32位的。它很可能是64位。@DeadMG-我直接从MSDN网站上得到了这个解释,可能有点过时了(x64之前)。可能想提一下您需要#包括。除了使用流,还有其他方法吗?只是好奇。@阿布拉利:C++方式是使用字符串流。C方式是使用@robeingon在其答案中所示的\u itow
(除非您实际上应该使用\u itow\u s
,以避免缓冲区溢出)。如果你使用C++,使用C++……一个LPCWSTR是一个常数LPWSTR——不完全是这样。常量LPWSTR
应该是wchar\u*const
,但是LPCWSTR
是const wchar\u*t*
@Marlon:不,那也不正确,因为那将是wchar\u*const*
。在LPWSTR
上没有任何资格认证将使您获得与LPCWSTR
相当的资格,typedef将其固定。可能需要提及的是您需要#包括
。除了使用流,还有其他方法吗?只是好奇。@阿布拉利:C++方式是使用字符串流。C方式是使用@robeingon在其答案中所示的\u itow
(除非您实际上应该使用\u itow\u s
,以避免缓冲区溢出)。如果你使用C++,使用C++……一个LPCWSTR是一个常数LPWSTR——不完全是这样。常量LPWSTR
应该是wchar\u*const
,但是LPCWSTR
是const wchar\u*t*
@Marlon:不,那也不正确,因为那将是wchar\u*const*
。在LPWSTR
上没有任何限定将使您获得与LPCWSTR
等价的类型定义。对于MSVC,您应该使用\u itow
的安全版本以避免缓冲区溢出,\u itow\s
:我得到这个错误:main.cpp(45):错误C2660:“\u itow\u s”:函数不接受3个参数。警告:要使用\u itow\u,需要传入缓冲区的大小。从上面的大小可以是15(30/2 - 30是缓冲区大小,2是siZeof(WC++)),所以调用将是iToWOSX(x,y,15, 10)。在这种情况下,您可能希望避免使用malloc。您可以像这样使用new:lpwstry=newwchar\u t[15];很抱歉,我没有注意到你是否想要C或C++的答案。对于MSVC,你应该使用安全版本的<代码> TIOW避免缓冲区溢出,<代码> ItOWOWS :我得到这个错误:Meal.CPP(45):错误C2660:“\u itow\u s”:函数不接受3个参数。警告:要使用\u itow\u,需要传入缓冲区的大小。从上面的大小可以是15(30/2 - 30是缓冲区大小,2是siZeof(WC++)),所以调用将是iToWOSX(x,y,15, 10)。在这种情况下,您可能希望避免使用malloc。您可以像这样使用new:lpwstry=newwchar\u t[15];我为翻转这件事道歉,我没有注意看你是否想要C或C++答案。