Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Привести array<byte>^ к чему-нибудь / 3 сообщений из 3, страница 1 из 1
26.11.2006, 14:50
    #34155949
Igor Skvortsov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести array<byte>^ к чему-нибудь
Есть массив байтов, объявленный как:
Код: plaintext
1.
array<byte>^encrypted = gcnew array<byte>(msEncrypt->Length);
Подскажите, как привести его к char*?

Для String^ есть чудная функиця: PtrToStringChars. Может есть аналог для array<byte>^ ?
...
Рейтинг: 0 / 0
27.11.2006, 13:42
    #34157601
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести array<byte>^ к чему-нибудь
Igor SkvortsovЕсть массив байтов, объявленный как:
Код: plaintext
1.
array<byte>^encrypted = gcnew array<byte>(msEncrypt->Length);
Подскажите, как привести его к char*?

Для String^ есть чудная функиця: PtrToStringChars. Может есть аналог для array<byte>^ ?

его не надо приводить...
при маршалинге нужно следовать нескольким правилам...
1) избегать маршалинга
2) избегать "ручных" способов маршалинга
3) стремиться обработать как можно больший объём информации за одно конвертирование


пример...
чтение из БД постгря, в си шарп...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void PGRecordset::GetValue(int nRow, int nField, array<Byte>^ buff)
{
	if(m_pRes != NULL)
	{
		int nLen = PQgetlength(m_pRes, nRow, nField);
		if(nLen > buff->Length)
		{
			nLen = buff->Length;
		}
		System::IntPtr pBuff = (System::IntPtr)PQgetvalue(m_pRes, nRow, nField);
		if(pBuff == System::IntPtr::Zero)
		{
			pBuff = (System::IntPtr)"0";
			nLen =  1 ;
		}
		System::Runtime::InteropServices::Marshal::Copy(pBuff, buff,
			buff->Length - nLen, nLen);
	}
}

обращаю Ваше внимание на статические методы ИнтеропСервиса, Маршал, Копи... Их там пару десятков кажись - ознакомтесь, это ускорит работу всего приложения...если у Вас критично к скорости...


(круглый)
...
Рейтинг: 0 / 0
27.11.2006, 18:48
    #34158900
Lepsik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привести array<byte>^ к чему-нибудь
Igor SkvortsovЕсть массив байтов, объявленный как:
Код: plaintext
1.
array<byte>^encrypted = gcnew array<byte>(msEncrypt->Length);
Подскажите, как привести его к char*?


что-нить типа того :

Код: plaintext
1.
2.
3.
4.
array<Byte>^ bytes;

int num = BitConverter::ToInt16( bytes,  1  );
ASCIIEncoding^ ascii = gcnew ASCIIEncoding();
String^ info = ascii->GetString( bytes,  3 , num );
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Привести array<byte>^ к чему-нибудь / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]