【发布时间】:2010-07-20 07:46:20
【问题描述】:
我想将 LPTSTR 转换为字符串或 char * 以便能够使用 ofstream 将其写入文件。
有什么想法吗?
【问题讨论】:
-
抱歉没有出现在搜索结果中
我想将 LPTSTR 转换为字符串或 char * 以便能够使用 ofstream 将其写入文件。
有什么想法吗?
【问题讨论】:
为此使用T2A 宏。
【讨论】:
其他线程中提供的大多数解决方案都不必要地转换为过时的编码而不是 Unicode 编码。只需使用reinterpret_cast<const char*> 编写UTF-16 文件,或使用WideCharToMultiByte 转换为UTF-8。
稍微偏离问题,现在使用LPTSTR 代替LPWSTR 没有多大意义,因为旧的9x 系列Windows 已完全过时且不受支持。只需在任何地方使用LPWSTR 和随附的“宽字符”(即UTF-16 代码单元)类型,如WCHAR 或wchar_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));
}
【讨论】:
wofstream 会写 UTF-16。 IIRC,Dinkumware 实现将写入(和读取,FTM)UTF-8。
ofstream 来防止C++ 的脑死字符转换,并使用reinterpret_cast。如果 Dinkumware 库使用 UTF-8,那很好,至少不是像 Windows-1252 这样完全疯狂的选择。
IIUC,LPTSTTR 可能指向 char 字符串或 wchar_t 字符串,具体取决于预处理器指令。如果正确,那么您需要在 std::ofstream 和 std::wofstream 之间切换,具体取决于该预处理器指令。
看看 this answer。它处理控制台流之间的切换,具体取决于TCHAR,但该方案也很容易适应文件流。
【讨论】: