4

バイナリ データを .NET に格納するための推奨される方法は何ですか?

私はこれを試しました:

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

そして、このエラーが発生しました:

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

バイト配列を管理する方法はありますか?

4

3 に答える 3

3

Managed C++ または C++/CLI を使用していますか? (Jon Skeet が質問を編集して 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);
于 2009-01-25T10:50:00.583 に答える
2

CodeProject: C++/CLI の配列

私が知る限り、「__gc new」構文は推奨されていません。次のことを試してください。

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

cli 名前空間に問題があることを指摘しました。問題を解決するには、MSDNでこの名前空間についてお読みください。

于 2009-01-25T09:15:19.730 に答える
1

これを行うための好ましい方法がわかりません。ただし、コンパイルのみが必要な場合は、次のコードが私のマシンの 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マネージド バイトのマネージド配列です。unsigned bchar のマネージド配列です。C++ にはbyteデータ型が組み込まれていないようです。

于 2009-01-25T10:44:15.087 に答える