Конвертировать LPTSTR в строку или символ * для записи в файл - PullRequest
3 голосов
/ 20 июля 2010

Я хочу преобразовать LPTSTR в строку или символ *, чтобы иметь возможность записать его в файл с использованием ofstream.

Любые идеи?

Ответы [ 3 ]

3 голосов
/ 20 июля 2010

Используйте для этого макрос T2A .

1 голос
/ 20 июля 2010

Большинство решений, представленных в других потоках, излишне преобразуются в устаревшую кодировку вместо кодировки Unicode.Просто используйте reinterpret_cast<const char*> для записи файлов UTF-16 или конвертируйте в UTF-8, используя WideCharToMultiByte.

Чтобы немного отойти от вопроса, использование LPTSTR вместо LPWSTR не даетВ настоящее время много смысла, поскольку старая серия Windows 9x полностью устарела и не поддерживается.Просто используйте 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));
}
0 голосов
/ 20 июля 2010

IIUC, LPTSTTR может указывать на строку char или wchar_t, в зависимости от директивы препроцессора.Если это так, то вам нужно переключиться между std::ofstream и std::wofstream, в зависимости от директивы препроцессора.
Посмотрите на этот ответ .Он имеет дело с переключением между консольными потоками, в зависимости от TCHAR, но схема легко адаптируется и для потоков файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...