|
Программирование >> Элементы языков с и с++
н C:\WINDOWS\system32\cmd.exe atiue String Л1Я продолжения нажмите любую клавишу Рис. 14.8. Результат преобразования строки обычных символов в managed-массив Пример 9. Преобразование System::Sthng в wchar t* или char* Метод PtrToStringChars о ИЗ Vcclr.h можно использовать для преобразования строки System: : String В native-СТрОку типа wchart * ИЛИ char *. Метод возвращает указатель на Юникод-строку, т. к. строки CLR - это строки /*вьшол (для проверки преобразования) элементов массива с использованием методов класса array:*/ for ( int i = byteArray->GetLowerBound(0); i <= byteArray->GetUpperBound(0); i++ ) /*byteArray->GetValue(i) выдает указатель на объект, а объектами являются элементы массива типа Byte. Поэтому идет преобразование типа. Но внутренний указатель в управляемой куче обладает свойствами обычного С++ указателя, поэтому можно применить опергщию разыменования (*), чтобы получить обычный симвсш:*/ char dc = *(Byte ) byteArray->GetValue(i); /*преобразование (Char) обычного символа в Юникод-симвсш, чтобы воспользоваться выводом из класса Console:*/ Console::Write((Char)dc); выдает стандартный символ окончания строки в стандартный выходной поток: Console::WriteLine(); 94-................. Листинг 14.9 2008-System String to wchar t ast or char as.cpp : main project file. Itinclude stdafx.h linclude < stdio.h > Itinclude < stdlib.h > linclude < vcclr.h > for PtrToStringChars() using namespace System; int niainO I String str = Hello from our friends! ; /♦преобразование String-строки в тип wchar t в управляемой куче и формирование pin-указателя на новую строку (указателя-фиксатора), чтобы строка не переместилась в куче, пока будет идти вызов native-функции printfО:*/ pin ptr<const wchar t> wch = PtrToStringChars(str); printf s( %S\n , wch); /♦преобразование к типу char*: можно сразу перевести wchar t* в char*, используя одну из функций-преобразователей WideCharTcMultiByte() и wcstombs s():*/ size t convertedChars = 0; size t sizelnBytes = ((str->Length + 1) * 2); errno t err = 0; /♦выделение памяти в неуправляемой куче под размер managed-строки () ch будет на нее указывать:*/ char *ch = (char *)mallcc(sizelnBytes); Юникода. Затем, как показано в примере, вы можете конвертировать широкую строку в обычную. Текст программы показан в листинге 14.9, а результат - на рис. 14.9. err = wcstoiTibs s (SconvertedChars, кол-во преобразуемых символов ch, sizelnBytes, адрес, куда они станут записываться wch, адрес, откуда они станут записываться sizelnBytes); количество переписываемых байтов , if (err != 0) print f s( wcstombss failed!\n ); printf s( %s\n , ch); вывод переписанной строки C:\WINOOWS\system32\cmd.exe lello fron our friends! Hello fron our friends! Jlля продолжения нажмите любую клавишу Рис. 14.9. Результат преобразования System::String-CTpoKn в wchart* и char* Пример 10. Преобразование String в string Фирма Microsoft ввела в С++ типы строк string и wstring. На самом деле - это синонимы класса basicstring, введенные через typedef. Первый тип относится к классу, строки которого (как элементы класса) относятся к типу char, а второй тип - к классу, строки которого (как элементы класса) относятся к типу wchart. В табл. 14.2 приведены операторы для работы со строками указанных типов. Таблица 14.2. Операторы для работы со строками типов string и wstring
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |