将LPTSTR转换为要写入文件的字符串或char *

时间:2010-07-20 07:46:21

标签: c++ winapi

我想将LPTSTR转换为string或char *,以便能够使用ofstream将其写入文件。

任何想法?

3 个答案:

答案 0 :(得分:3)

使用T2A宏。

答案 1 :(得分:1)

其他线程中提供的大多数解决方案都不必要地转换为过时的编码而不是Unicode编码。只需使用reinterpret_cast<const char*>编写UTF-16文件,或使用WideCharToMultiByte转换为UTF-8。

为了稍微偏离问题,现在使用LPTSTR代替LPWSTR并没有多大意义,因为旧的9x系列Windows完全过时且不受支持。只需使用LPWSTR和随附的“宽字符”(即UTF-16代码单元)类型,例如WCHARwchar_t

以下是一个示例(我希望)写入UTF-16或UTF-32(后者在Linux / OS X上):

#include <fstream>
#include <string>

int main() {
  std::ofstream stream("test.txt");  // better use L"test.txt" on Windows if possible
  std::wstring string = L"Test\n";
  stream.write(reinterpret_cast<const char*>(string.data()), string.size() * sizeof(wchar_t));
}

答案 2 :(得分:0)

IIUC,LPTSTTR可能指向char字符串或wchar_t字符串,具体取决于预处理程序指令。如果这是正确的,那么您需要在std::ofstreamstd::wofstream之间切换,具体取决于预处理器指令。
看一下 this answer 。它处理控制台流之间的切换,具体取决于TCHAR,但该方案也很容易适用于文件流。