2013-02-27 40 views
12

Vì tiêu đề cho biết tôi muốn biết cách tốt nhất để chuyển đổi một số int thành const wchar_t*. trong thực tế, tôi muốn sử dụng chức năng _tcscpyChuyển đổi int thành const wchar_t *

_tcscpy(m_reportFileName, myIntValue); 
+0

Bình thường thợ đúc chư? Nhưng bạn nhớ rằng ký tự "cuối" _has_ bằng 0 hoặc bạn nhập vào lãnh thổ của hành vi không xác định. Điều này có nghĩa là 'int' của bạn chỉ có thể lưu trữ một ký tự (' int' là 32 bit trên Windows và 'wchar_t' là 16 bit). –

+0

Tôi nghĩ (const wchar_t *) variable_name; nên làm việc. – haitaka

+0

Chính xác bạn có ý nghĩa gì khi "chuyển đổi"? Chăm sóc để đưa ra một ví dụ? –

Trả lời

6

Vì bạn đang sử dụng một cách tiếp cận C (Tôi giả định rằng m_reportFileName là một liệu C wchar_t mảng), bạn có thể muốn xem xét chỉ swprintf_s() trực tiếp:

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

Trong một hiện đại hơn Cách tiếp cận C++, bạn có thể xem xét sử dụng std::wstring thay vì mảng wchar_t thô và std::to_wstring để chuyển đổi.

+0

Tham số thứ hai không phải là 'swprintf_s' được cho là kích thước của bộ đệm? – CinCout

+0

@CinCout Trong C++, nhờ vào các thủ thuật mẫu, trình biên dịch có thể tự động suy ra kích thước bộ đệm từ đối số bộ đệm đầu tiên. –

+0

Nếu đó là con trỏ thì sao? – CinCout

2

Đó không phải là "chuyển đổi". Đó là quy trình gồm hai bước:

  1. Định dạng số thành chuỗi, sử dụng ký tự rộng.
  2. Sử dụng địa chỉ của chuỗi trong cuộc gọi.

Điều đầu tiên có thể được thực hiện bằng cách sử dụng ví dụ: StringCbPrintf(), giả sử bạn đang xây dựng với các ký tự rộng được bật.

Tất nhiên, bạn có thể chọn định dạng chuỗi thẳng thành m_reportFileName, loại bỏ sự cần thiết phải sao chép hoàn toàn.

2

Trong C++11:

wstring value = to_wstring(100); 

Pre- C++11:

wostringtream wss; 
wss << 100; 
wstring value = wss.str(); 
Các vấn đề liên quan