2013-02-27 732 views
12

正如标题所示,我想知道将int转换为const wchar_t*的最佳方法。 其实我想使用的功能_tcscpy将int转换为常量wchar_t *

_tcscpy(m_reportFileName, myIntValue); 
+0

普通类型转换?但是你记得“最后一个”字符是零,或者你进入未定义行为的范围。这意味着你的'int'只能存储一个字符('int'在Windows上是32位,'wchar_t'是16位)。 – 2013-02-27 10:19:30

+0

我认为(const wchar_t *)variable_name;应该管用。 – haitaka 2013-02-27 10:19:36

+0

“转换”是什么意思?谨慎举一个例子? – 2013-02-27 10:19:48

回答

6

由于您使用的是Ç方法(我假设m_reportFileName原料Çwchar_t阵列),你可能只想swprintf_s()直接考虑:

#include <stdio.h> // for swprintf_s, wprintf 

int main() 
{ 
    int myIntValue = 20; 
    wchar_t m_reportFileName[256]; 

    swprintf_s(m_reportFileName, L"%d", myIntValue); 

    wprintf(L"%s\n", m_reportFileName); 
} 

在更现代的C++方法,您可以考虑使用std::wstring而不是原始wchar_t数组和std::to_wstring进行转换。

+0

是不是'swprintf_s'的第二个参数应该是缓冲区的大小? – CinCout 2017-04-27 03:00:12

+0

@CinCout在C++中,感谢模板技巧,编译器能够从第一个缓冲区参数中自动推断出缓冲区大小。 – 2017-04-27 10:28:00

+0

如果它是一个指针呢? – CinCout 2017-04-27 11:01:00

2

这不是一个“转换”。这是一个两步过程:

  1. 使用宽字符将数字格式化为字符串。
  2. 在调用中使用该字符串的地址。

首先可以使用例如StringCbPrintf(),假设您正在构建启用宽字符。

当然,您可以选择将字符串直接格式化为m_reportFileName,而不需要完全复制副本。

2

C++11

wstring value = to_wstring(100); 

C++11

wostringtream wss; 
wss << 100; 
wstring value = wss.str();