2013-02-27 64 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();