Что является лучшим способом преобразовать между символом* и Системой:: Строка в C++ / CLI

Другое решение состоит в создании ассоциативного массива с форматом даты и последующим переформатированием данных.

Этот метод полезен для даты, отформатированной беспорядочным способом.

Пример:

    mydate='01.02.12 10:20:43':
    myformat='dd/mm/yy HH:MM:ss';


    dtsplit=mydate.split(/[\/ .:]/);
    dfsplit=myformat.split(/[\/ .:]/);

    // creates assoc array for date
    df = new Array();
    for(dc=0;dc<6;dc++) {
            df[dfsplit[dc]]=dtsplit[dc];
            }

    // uses assc array for standard mysql format
    dstring[r] = '20'+df['yy']+'-'+df['mm']+'-'+df['dd'];
    dstring[r] += ' '+df['HH']+':'+df['MM']+':'+df['ss'];
42
задан Deduplicator 9 March 2015 в 12:47
поделиться

3 ответа

Существует хороший обзор здесь (эта поддержка маршалинга, добавленная для VS2008): http://www.codeproject.com/KB/mcpp/OrcasMarshalAs.aspx

18
ответ дан Matthew Clendening 26 November 2019 в 23:38
поделиться

Система:: Строка имеет конструктора, который берет char*:

 using namespace system;
 const char* charstr = "Hello, world!";
 String^ clistr = gcnew String(charstr);
 Console::WriteLine(clistr);

Получение символа* назад немного более трудно, но не слишком плохо:

 IntPtr p = Marshal::StringToHGlobalAnsi(clistr);
 char *pNewCharStr = static_cast<char*>(p.ToPointer());
 cout << pNewCharStr << endl;
 Marshal::FreeHGlobal(p);
73
ответ дан marsh 26 November 2019 в 23:38
поделиться

То, что мы сделали, сделано, C ++\CLI возражают, что содержал строку в коде unmangaed и выделит manged копии объекта. Код преобразования смотрит очень как то, что Stan имеет на своем блоге (я не могу помнить его точно) (Если Вы используете его код, удостоверяются, что Вы обновляете его для использования, удаляют []), но мы удостоверились, что деструктор обработает выпуск всех unmanged элементов объекта. Это немного раздуто, но у нас не было утечек, когда мы набросились на модули кода C++ прежней версии.

0
ответ дан Dan Blair 26 November 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: