2016-11-30 221 views
-3

我使用C/C++,是否有任何窗口函数或任何非常快速的方法将标题中的任何类型转换为const WCHAR *?将INT8,INT64,UINT8 ... UINT64,float,double转换为WCHAR *

因此,我有一个大案例,在我需要将数据转换为WCHAR *的某个分支后,检查我的数据是什么类型。

因此,例如,如果我有 21,我希望它是L“21”。 32.322 => L“32.322” 等

我可以手动做,但我更喜欢它,如果有一些更快的方法!这些转换似乎在一些较低级别上发生了很多。

谢谢!

+2

['的std :: to_wstring'](http://en.cppreference.com/w/cpp/string/basic_string/to_wstring) – NathanOliver

+0

我刚找到用于UINT32单程: WCHAR BUF [20] = L “”; (buf,L“%u”,UINT32_Value); swprintf(buf,L“%u”,UINT32_Value); 有谁知道这个转换是否可以,还有其他的转换是什么? – user7042812

+0

[stringstream](http://en.cppreference.com/w/cpp/io/basic_stringstream)是解决所有转换需求的好方法。像ostream一样工作(即“cout”)。在这种情况下,我想你会使用'wstringstream'。 – Lundin

回答

1

如果您使用C++ 11或C++ 14,则可以使用std::to_wstring。否则以这种方式使用 '的swprintf':

创建具有适当阵列尺寸的宽字符串缓冲区:

wchar_t wstr[32]; 

要转换成整数,使用 '的swprintf' 与 '%d' 格式:

swprintf(wstr, L"%d", 21); 

现在 'WSTR' 包含你的 “21”

并转换成浮点,使用 '的swprintf' 与 '%。* F' 格式。我们将在小数点后使用最多3位数字(默认情况下,这是6)。因此,这将需要更少的 'wchar_t的' 存储:

swprintf(wstr, L"%.*f", 3, 32.322f); 

现在 'WSTR' 包含你的 “32.322”

看看下面的MSDN页面,了解 '的swprintf'

sprintf, swprintf更多信息

+0

谢谢!而且我会如何区分INT8,INT16 UINT8等? – user7042812

+0

@ user7042812对于INT8到INT32,“%d”应该足够了。对INT64使用“%ll”。使用“%u”作为无符号数据类型,如UINT8到UINT32和“%llu”作为UINT64。 –

+0

@ user7042812有关printf/sprintf/swprintf等函数格式的更多信息,请查看以下链接 - http://www.cplusplus.com/reference/cstdio/printf/ –