代码之家  ›  专栏  ›  技术社区  ›  martin

二进制数据在.NET中?(c++/CLI)

  •  4
  • martin  · 技术社区  · 17 年前

    在.NET中存储二进制数据的首选方法是什么?

    我试过这个:

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

    得到这个错误:

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

    有办法管理字节数组吗?

    3 回复  |  直到 17 年前
        1
  •  3
  •   Rasmus Faber    17 年前

    你使用的是管理C++还是C++/CLI?(我可以看到乔恩)编辑了这个问题,向标题中添加了C++,但是对我来说,它看起来像是在使用托管C++)。

    但无论如何:

    在托管C++中,你会这样做:

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

    在C++/CLI中,它看起来是这样的:

    cli::array<unsigned char>^ data = gcnew cli::array<unsigned char>(100);
    
        2
  •  2
  •   aku    17 年前

    CodeProject: Arrays in C++/CLI

    据我所知,不推荐使用'uuugc new'语法,请尝试以下操作:

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

    我注意到您在cli名称空间方面有问题。读一下这个 namespace on MSDN 来解决你的问题。

        3
  •  1
  •   Gant    17 年前

    我不知道该怎么做。但是,如果您只想编译它,以下是我的C++/CLI CLR控制台项目从我的机器上的工作代码。

    #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 内置数据类型。

    推荐文章