2013-02-27 15 views
12

Jak wskazuje tytuł Chcę poznać najlepszy sposób przekonwertowania int na const wchar_t*. w rzeczywistości chcę użyć _tcscpy funkcjaKonwertuj int na const wchar_t *

_tcscpy(m_reportFileName, myIntValue); 
+0

Normal typecast? Ale pamiętasz, że "ostatnia" postać ma zero, albo wkraczasz na terytorium niezdefiniowanego zachowania. Oznacza to, że twój 'int' może przechowywać tylko jeden znak (' int' to 32 bity w systemie Windows, a 'wchar_t' to 16 bitów). –

+0

Myślę (const wchar_t *) variable_name; powinno działać. – haitaka

+0

Co dokładnie rozumiesz przez "konwersję"? Chcesz podać przykład? –

Odpowiedz

6

Ponieważ używasz podejście C (jestem zakładając, że m_reportFileName jest surowy C wchar_t tablica), można rozważyć tylko swprintf_s() bezpośrednio:

#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); 
} 

w A bardziej nowoczesny C++ podejście, możesz rozważyć użycie std::wstring zamiast surowego wchar_t tablicy i std::to_wstring dla konwersji.

+0

Czy drugi parametr dla 'swprintf_s' nie powinien być wielkością bufora? – CinCout

+0

@CinCout W C++, dzięki szablonowym sztuczkom, kompilator jest w stanie automatycznie wywnioskować rozmiar bufora z pierwszego argumentu bufora. –

+0

Co jeśli jest wskaźnikiem? – CinCout

2

to nie jest „konwersja”. Jest to proces dwuetapowy:

  1. Sformatuj liczbę w łańcuchu, używając szerokich znaków.
  2. Użyj adresu ciągu w wywołaniu.

Pierwszą rzecz można osiągnąć za pomocą np. StringCbPrintf(), zakładając, że budujesz z włączonymi szerokimi znakami.

Oczywiście można również sformatować ciąg bezpośrednio pod numerem m_reportFileName, co eliminuje konieczność wykonywania kopii.

2

W C++11:

wstring value = to_wstring(100); 

Pre- C++11:

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