Двоичные данные в .NET? (C ++ / CLI) - PullRequest
4 голосов
/ 25 января 2009

Какой предпочтительный способ хранения двоичных данных в .NET?

Я пробовал это:

byte data __gc [] = __gc new byte [100];

И получил эту ошибку:

error C2726: '__gc new' may only be used to create an object with managed type

Есть ли способ управлять массивом байтов?

Ответы [ 3 ]

3 голосов
/ 25 января 2009

Используете ли вы Managed C ++ или C ++ / CLI? (Я вижу, что Джон Скит отредактировал вопрос, добавив в заголовок C ++ / CLI, но мне кажется, что вы на самом деле используете Managed C ++).

Но все равно:

В Managed C ++ вы бы сделали это так:

Byte data __gc [] = new Byte __gc [100];

В C ++ / CLI это выглядит так:

cli::array<unsigned char>^ data = gcnew cli::array<unsigned char>(100);
2 голосов
/ 25 января 2009

CodeProject: Массивы в C ++ / CLI

Насколько я знаю, синтаксис '__gc new' устарел, попробуйте следующее:

cli::array<byte>^ data = gcnew cli::array<byte>(100);

Я заметил, что у вас проблемы с пространством имен cli. Прочитайте об этом пространстве имен на MSDN , чтобы решить ваши проблемы.

1 голос
/ 25 января 2009

Я не знаю предпочтительный способ сделать это. Но если вам нужна только его компиляция, ниже приведен рабочий код из моего проекта C ++ / CLI CLRConsole с моей машины.

#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
    cli::array<System::Byte^>^ a = 
        gcnew cli::array<System::Byte^>(101);

    a[1] = (unsigned char)124;

    cli::array<unsigned char>^ b = 
        gcnew cli::array<unsigned char>(102);

    b[1] = (unsigned char)211;

    Console::WriteLine(a->Length);
    Console::WriteLine(b->Length);

    Console::WriteLine(a[1] + " : " + b[1]);
    return 0;
}

Выход:

101
102
124 : 211

a является управляемым массивом управляемого байта. И b - это управляемый массив беззнаковых символов. C ++, похоже, не имеет встроенного типа данных byte.

...