Программирование >>  Элементы языков с и с++ 

1 ... 180 181 182 [ 183 ] 184 185 186 ... 200


н 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

Оператор

Что делает

Сцепляет две строки

Проверяет на неравенство строки, расположенные по обе стороны от оператора

Проверяет на равенство строки, расположенные по обе стороны от оператора



1 ... 180 181 182 [ 183 ] 184 185 186 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика