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

您使用的是托管 C++ 还是 C++/CLI?(我可以看到 Jon Skeet 编辑了问题以将 C++/CLI 添加到标题中,但在我看来,您实际上是在使用托管 C++)。

但不管怎么说:

在托管 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是托管字节的托管数组。并且b是无符号字符的托管数组。C++ 似乎没有byte内置数据类型。

于 2009-01-25T10:44:15.087 回答