Пример 8. Преобразование char* в массив System::Byte

   
На этом шаге мы приведем программу, реализующую указанное преобразование.

   
Текст программы приведен ниже, а результат - на рисунке 1.

// 219_1.cpp: главный файл проекта.

#include "stdafx.h"
#include <string.h> //for strlen()

using namespace System;
using namespace System::Runtime::InteropServices;

void main()
{
	char buf[] = "Native String";
	int len = strlen(buf);  //длина строки

	array< Byte >^ byteArray = gcnew array< Byte >(len + 2);
	// копирование символов char с преобразованием указателя 
	// на них во внутренний указатель на них в управляемой куче. 
	// Преобразование идет в обычном С-стиле:
	Marshal::Copy((IntPtr)buf, byteArray, 0, len);

	// вывод (для проверки преобразования) элементов массива 
	// с использованием методов класса array:
	for ( int i = byteArray->GetLowerBound(0); 
		i <= byteArray->GetUpperBound(0); i++ )
	{
		// byteArray->GetValue(i) выдает указатель на объект а. 
		// Объектами являются элементы массива типа Byte. 
		// Поэтому идет преобразование типа. Но внутренний 
		// указатель в управляемой куче обладает свойствами 
		// обычного C++ указателя, поэтому можно применить 
		// операцию разыменования (*), чтобы получить 
		// обычный символ:
		char dc = *(Byte^) byteArray->GetValue(i);

		// Преобразование (Char) обычного символа в Юникод-символ, 
		// чтобы воспользоваться выводом из класса Console:
		Console::Write((Char)dc);
	}
	// выдает стандартный символ окончания строки в стандартный 
	// выходной поток:
	Console::WriteLine(); 
	Console::ReadLine();
}

Архив проекта можно взять здесь.


Рис.1. Результат преобразования строки обычных символов в managed-массив

   
На следующем шаге мы рассмотрим преобразование System::String в wchar_t* или char*.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий